xref: /aosp_15_r20/external/musl/src/math/nearbyint.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
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 Worker double 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