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