xref: /aosp_15_r20/external/musl/src/math/nearbyintl.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include <math.h>
2*c9945492SAndroid Build Coastguard Worker #include <float.h>
3*c9945492SAndroid Build Coastguard Worker 
4*c9945492SAndroid Build Coastguard Worker #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
nearbyintl(long double x)5*c9945492SAndroid Build Coastguard Worker long double nearbyintl(long double x)
6*c9945492SAndroid Build Coastguard Worker {
7*c9945492SAndroid Build Coastguard Worker 	return nearbyint(x);
8*c9945492SAndroid Build Coastguard Worker }
9*c9945492SAndroid Build Coastguard Worker #else
10*c9945492SAndroid Build Coastguard Worker #include <fenv.h>
nearbyintl(long double x)11*c9945492SAndroid Build Coastguard Worker long double nearbyintl(long double x)
12*c9945492SAndroid Build Coastguard Worker {
13*c9945492SAndroid Build Coastguard Worker #ifdef FE_INEXACT
14*c9945492SAndroid Build Coastguard Worker 	#pragma STDC FENV_ACCESS ON
15*c9945492SAndroid Build Coastguard Worker 	int e;
16*c9945492SAndroid Build Coastguard Worker 
17*c9945492SAndroid Build Coastguard Worker 	e = fetestexcept(FE_INEXACT);
18*c9945492SAndroid Build Coastguard Worker #endif
19*c9945492SAndroid Build Coastguard Worker 	x = rintl(x);
20*c9945492SAndroid Build Coastguard Worker #ifdef FE_INEXACT
21*c9945492SAndroid Build Coastguard Worker 	if (!e)
22*c9945492SAndroid Build Coastguard Worker 		feclearexcept(FE_INEXACT);
23*c9945492SAndroid Build Coastguard Worker #endif
24*c9945492SAndroid Build Coastguard Worker 	return x;
25*c9945492SAndroid Build Coastguard Worker }
26*c9945492SAndroid Build Coastguard Worker #endif
27