1*c9945492SAndroid Build Coastguard Worker #include <fenv.h> 2*c9945492SAndroid Build Coastguard Worker #include <math.h> 3*c9945492SAndroid Build Coastguard Worker 4*c9945492SAndroid Build Coastguard Worker /* nearbyint is the same as rint, but it must not raise the inexact exception */ 5*c9945492SAndroid Build Coastguard Worker nearbyint(double x)6*c9945492SAndroid Build Coastguard Workerdouble nearbyint(double x) 7*c9945492SAndroid Build Coastguard Worker { 8*c9945492SAndroid Build Coastguard Worker #ifdef FE_INEXACT 9*c9945492SAndroid Build Coastguard Worker #pragma STDC FENV_ACCESS ON 10*c9945492SAndroid Build Coastguard Worker int e; 11*c9945492SAndroid Build Coastguard Worker 12*c9945492SAndroid Build Coastguard Worker e = fetestexcept(FE_INEXACT); 13*c9945492SAndroid Build Coastguard Worker #endif 14*c9945492SAndroid Build Coastguard Worker x = rint(x); 15*c9945492SAndroid Build Coastguard Worker #ifdef FE_INEXACT 16*c9945492SAndroid Build Coastguard Worker if (!e) 17*c9945492SAndroid Build Coastguard Worker feclearexcept(FE_INEXACT); 18*c9945492SAndroid Build Coastguard Worker #endif 19*c9945492SAndroid Build Coastguard Worker return x; 20*c9945492SAndroid Build Coastguard Worker } 21