1*c9945492SAndroid Build Coastguard Worker #include "libm.h" 2*c9945492SAndroid Build Coastguard Worker 3*c9945492SAndroid Build Coastguard Worker #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 rintl(long double x)4*c9945492SAndroid Build Coastguard Workerlong double rintl(long double x) 5*c9945492SAndroid Build Coastguard Worker { 6*c9945492SAndroid Build Coastguard Worker return rint(x); 7*c9945492SAndroid Build Coastguard Worker } 8*c9945492SAndroid Build Coastguard Worker #elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384 9*c9945492SAndroid Build Coastguard Worker 10*c9945492SAndroid Build Coastguard Worker static const long double toint = 1/LDBL_EPSILON; 11*c9945492SAndroid Build Coastguard Worker rintl(long double x)12*c9945492SAndroid Build Coastguard Workerlong double rintl(long double x) 13*c9945492SAndroid Build Coastguard Worker { 14*c9945492SAndroid Build Coastguard Worker union ldshape u = {x}; 15*c9945492SAndroid Build Coastguard Worker int e = u.i.se & 0x7fff; 16*c9945492SAndroid Build Coastguard Worker int s = u.i.se >> 15; 17*c9945492SAndroid Build Coastguard Worker long double y; 18*c9945492SAndroid Build Coastguard Worker 19*c9945492SAndroid Build Coastguard Worker if (e >= 0x3fff+LDBL_MANT_DIG-1) 20*c9945492SAndroid Build Coastguard Worker return x; 21*c9945492SAndroid Build Coastguard Worker if (s) 22*c9945492SAndroid Build Coastguard Worker y = x - toint + toint; 23*c9945492SAndroid Build Coastguard Worker else 24*c9945492SAndroid Build Coastguard Worker y = x + toint - toint; 25*c9945492SAndroid Build Coastguard Worker if (y == 0) 26*c9945492SAndroid Build Coastguard Worker return 0*x; 27*c9945492SAndroid Build Coastguard Worker return y; 28*c9945492SAndroid Build Coastguard Worker } 29*c9945492SAndroid Build Coastguard Worker #endif 30