X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=src%2Fmath%2Fnearbyint.c;h=f4e8aac4f0118d7d48d1d6a8e4af0fec048ee62a;hp=714c55cadb68ed95a357a3bf900b00fe651b78d4;hb=d8a7619e371ff0f226200f6316abb46dd1192f3d;hpb=93a50a26cd0f9efc59cc83daae7b2d916b327ab1 diff --git a/src/math/nearbyint.c b/src/math/nearbyint.c index 714c55ca..f4e8aac4 100644 --- a/src/math/nearbyint.c +++ b/src/math/nearbyint.c @@ -1,20 +1,20 @@ #include #include -/* -rint may raise inexact (and it should not alter the fenv otherwise) -nearbyint must not raise inexact +/* nearbyint is the same as rint, but it must not raise the inexact exception */ -(according to ieee754r section 7.9 both functions should raise invalid -when the input is signaling nan, but c99 does not define snan so saving -and restoring the entire fenv should be fine) -*/ +double nearbyint(double x) +{ +#ifdef FE_INEXACT + #pragma STDC FENV_ACCESS ON + int e; -double nearbyint(double x) { - fenv_t e; - - fegetenv(&e); + e = fetestexcept(FE_INEXACT); +#endif x = rint(x); - fesetenv(&e); +#ifdef FE_INEXACT + if (!e) + feclearexcept(FE_INEXACT); +#endif return x; }