X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=src%2Fmath%2Ffmal.c;h=87e30fcf65394f71b34027081feb9cab0f013ca4;hp=be64f145bbaeee42d5f29b63ce87f31251c15942;hb=1e5eb73545ca6cfe8b918798835aaf6e07af5beb;hpb=2786c7d21611b9fa3b2fe356542cf213e7dd0ba4 diff --git a/src/math/fmal.c b/src/math/fmal.c index be64f145..87e30fcf 100644 --- a/src/math/fmal.c +++ b/src/math/fmal.c @@ -162,6 +162,7 @@ static inline struct dd dd_mul(long double a, long double b) */ long double fmal(long double x, long double y, long double z) { + #pragma STDC FENV_ACCESS ON long double xs, ys, zs, adj; struct dd xy, r; int oround; @@ -261,6 +262,8 @@ long double fmal(long double x, long double y, long double z) /* * There is no need to worry about double rounding in directed * rounding modes. + * TODO: underflow is not raised correctly, example in downward rounding: + * fmal(0x1.0000000001p-16000L, 0x1.0000000001p-400L, -0x1p-16440L) */ fesetround(oround); adj = r.lo + xy.lo;