15 FE_TONEAREST, 0x0p+0, 0, 0,
16 FE_DOWNWARD, 0x0p+0, 0, 0,
17 FE_UPWARD, 0x0p+0, 0, 0,
18 FE_TOWARDZERO, 0x0p+0, 0, 0,
19 FE_TONEAREST, 0x1p-2, 0, FE_INEXACT,
20 FE_DOWNWARD, 0x1p-2, 0, FE_INEXACT,
21 FE_UPWARD, 0x1p-2, 1, FE_INEXACT,
22 FE_TOWARDZERO, 0x1p-2, 0, FE_INEXACT,
23 FE_TONEAREST, -0x1p-2, 0, FE_INEXACT,
24 FE_DOWNWARD, -0x1p-2, -1, FE_INEXACT,
25 FE_UPWARD, -0x1p-2, 0, FE_INEXACT,
26 FE_TOWARDZERO, -0x1p-2, 0, FE_INEXACT,
27 FE_TONEAREST, 0x1p-1, 0, FE_INEXACT,
28 FE_DOWNWARD, 0x1p-1, 0, FE_INEXACT,
29 FE_UPWARD, 0x1p-1, 1, FE_INEXACT,
30 FE_TOWARDZERO, 0x1p-1, 0, FE_INEXACT,
31 FE_TONEAREST, -0x1p-1, 0, FE_INEXACT,
32 FE_DOWNWARD, -0x1p-1, -1, FE_INEXACT,
33 FE_UPWARD, -0x1p-1, 0, FE_INEXACT,
34 FE_TOWARDZERO, -0x1p-1, 0, FE_INEXACT,
35 FE_TONEAREST, 0x1.8p-1, 1, FE_INEXACT,
36 FE_DOWNWARD, 0x1.8p-1, 0, FE_INEXACT,
37 FE_UPWARD, 0x1.8p-1, 1, FE_INEXACT,
38 FE_TOWARDZERO, 0x1.8p-1, 0, FE_INEXACT,
39 FE_TONEAREST, -0x1.8p-1, -1, FE_INEXACT,
40 FE_DOWNWARD, -0x1.8p-1, -1, FE_INEXACT,
41 FE_UPWARD, -0x1.8p-1, 0, FE_INEXACT,
42 FE_TOWARDZERO, -0x1.8p-1, 0, FE_INEXACT,
43 FE_TONEAREST, 0x1p+0, 1, 0,
44 FE_DOWNWARD, 0x1p+0, 1, 0,
45 FE_UPWARD, 0x1p+0, 1, 0,
46 FE_TOWARDZERO, 0x1p+0, 1, 0,
47 FE_TONEAREST, -0x1p+0, -1, 0,
48 FE_DOWNWARD, -0x1p+0, -1, 0,
49 FE_UPWARD, -0x1p+0, -1, 0,
50 FE_TOWARDZERO, -0x1p+0, -1, 0,
51 FE_TONEAREST, 0x1.4p+0, 1, FE_INEXACT,
52 FE_DOWNWARD, 0x1.4p+0, 1, FE_INEXACT,
53 FE_UPWARD, 0x1.4p+0, 2, FE_INEXACT,
54 FE_TOWARDZERO, 0x1.4p+0, 1, FE_INEXACT,
55 FE_TONEAREST, -0x1.4p+0, -1, FE_INEXACT,
56 FE_DOWNWARD, -0x1.4p+0, -2, FE_INEXACT,
57 FE_UPWARD, -0x1.4p+0, -1, FE_INEXACT,
58 FE_TOWARDZERO, -0x1.4p+0, -1, FE_INEXACT,
59 FE_TONEAREST, 0x1p+30, 1073741824, 0,
60 FE_DOWNWARD, 0x1p+30, 1073741824, 0,
61 FE_UPWARD, 0x1p+30, 1073741824, 0,
62 FE_TOWARDZERO, 0x1p+30, 1073741824, 0,
63 FE_TONEAREST, -0x1p+30, -1073741824, 0,
64 FE_DOWNWARD, -0x1p+30, -1073741824, 0,
65 FE_UPWARD, -0x1p+30, -1073741824, 0,
66 FE_TOWARDZERO, -0x1p+30, -1073741824, 0,
67 FE_TONEAREST, 0x1.fffffffcp+30, 2147483647, 0,
68 FE_DOWNWARD, 0x1.fffffffcp+30, 2147483647, 0,
69 FE_UPWARD, 0x1.fffffffcp+30, 2147483647, 0,
70 FE_TOWARDZERO, 0x1.fffffffcp+30, 2147483647, 0,
71 FE_TONEAREST, -0x1.fffffffcp+30, -2147483647, 0,
72 FE_DOWNWARD, -0x1.fffffffcp+30, -2147483647, 0,
73 FE_UPWARD, -0x1.fffffffcp+30, -2147483647, 0,
74 FE_TOWARDZERO, -0x1.fffffffcp+30, -2147483647, 0,
75 FE_TONEAREST, 0x1p+31, 0, FE_INVALID,
76 FE_DOWNWARD, 0x1p+31, 0, FE_INVALID,
77 FE_UPWARD, 0x1p+31, 0, FE_INVALID,
78 FE_TOWARDZERO, 0x1p+31, 0, FE_INVALID,
79 FE_TONEAREST, -0x1p+31, -2147483648, 0,
80 FE_DOWNWARD, -0x1p+31, -2147483648, 0,
81 FE_UPWARD, -0x1p+31, -2147483648, 0,
82 FE_TOWARDZERO, -0x1p+31, -2147483648, 0,
83 FE_TONEAREST, 0x1.00000002p+31, 0, FE_INVALID,
84 FE_DOWNWARD, 0x1.00000002p+31, 0, FE_INVALID,
85 FE_UPWARD, 0x1.00000002p+31, 0, FE_INVALID,
86 FE_TOWARDZERO, 0x1.00000002p+31, 0, FE_INVALID,
87 FE_TONEAREST, -0x1.00000002p+31, 0, FE_INVALID,
88 FE_DOWNWARD, -0x1.00000002p+31, 0, FE_INVALID,
89 FE_UPWARD, -0x1.00000002p+31, 0, FE_INVALID,
90 FE_TOWARDZERO, -0x1.00000002p+31, 0, FE_INVALID,
91 FE_TONEAREST, 0x1.fffffffep+30, 0, FE_INVALID,
92 FE_DOWNWARD, 0x1.fffffffep+30, 2147483647, FE_INEXACT,
93 FE_UPWARD, 0x1.fffffffep+30, 0, FE_INVALID,
94 FE_TOWARDZERO, 0x1.fffffffep+30, 2147483647, FE_INEXACT,
95 FE_TONEAREST, -0x1.fffffffep+30, -2147483648, FE_INEXACT,
96 FE_DOWNWARD, -0x1.fffffffep+30, -2147483648, FE_INEXACT,
97 FE_UPWARD, -0x1.fffffffep+30, -2147483647, FE_INEXACT,
98 FE_TOWARDZERO, -0x1.fffffffep+30, -2147483647, FE_INEXACT,
99 FE_TONEAREST, 0x1.00000001p+31, 0, FE_INVALID,
100 FE_DOWNWARD, 0x1.00000001p+31, 0, FE_INVALID,
101 FE_UPWARD, 0x1.00000001p+31, 0, FE_INVALID,
102 FE_TOWARDZERO, 0x1.00000001p+31, 0, FE_INVALID,
103 FE_TONEAREST, -0x1.00000001p+31, -2147483648, FE_INEXACT,
104 FE_DOWNWARD, -0x1.00000001p+31, 0, FE_INVALID,
105 FE_UPWARD, -0x1.00000001p+31, -2147483648, FE_INEXACT,
106 FE_TOWARDZERO, -0x1.00000001p+31, -2147483648, FE_INEXACT,
107 FE_TONEAREST, 0x1p+32, 0, FE_INVALID,
108 FE_DOWNWARD, 0x1p+32, 0, FE_INVALID,
109 FE_UPWARD, 0x1p+32, 0, FE_INVALID,
110 FE_TOWARDZERO, 0x1p+32, 0, FE_INVALID,
111 FE_TONEAREST, -0x1p+32, 0, FE_INVALID,
112 FE_DOWNWARD, -0x1p+32, 0, FE_INVALID,
113 FE_UPWARD, -0x1p+32, 0, FE_INVALID,
114 FE_TOWARDZERO, -0x1p+32, 0, FE_INVALID,
115 FE_TONEAREST, 0x1.ffffffffp+31, 0, FE_INVALID,
116 FE_DOWNWARD, 0x1.ffffffffp+31, 0, FE_INVALID,
117 FE_UPWARD, 0x1.ffffffffp+31, 0, FE_INVALID,
118 FE_TOWARDZERO, 0x1.ffffffffp+31, 0, FE_INVALID,
119 FE_TONEAREST, -0x1.ffffffffp+31, 0, FE_INVALID,
120 FE_DOWNWARD, -0x1.ffffffffp+31, 0, FE_INVALID,
121 FE_UPWARD, -0x1.ffffffffp+31, 0, FE_INVALID,
122 FE_TOWARDZERO, -0x1.ffffffffp+31, 0, FE_INVALID,
130 for (i = 0; i < sizeof t/sizeof *t; i++) {
131 fesetround(t[i].round);
132 feclearexcept(FE_ALL_EXCEPT);
134 f = fetestexcept(FE_ALL_EXCEPT);
136 if (t[i].except != FE_INVALID && n != t[i].n)
137 error("round=%s, lrint(%a) want %ld got %ld\n", strround(t[i].round), t[i].x, t[i].n, n);
138 if (f != t[i].except)
139 error("round=%s, lrint(%a)==%ld want except=%s, got except=%s\n",
140 strround(t[i].round), t[i].x, t[i].n, strdup(strexcept(t[i].except)), strdup(strexcept(f)));
144 void bench_lrint_simple(int N)
149 for (i = 0; i < N; i++) {
154 void bench_lrint_hard(int N)
159 for (i = 0; i < N; i++) {
160 // feclearexcept(FE_ALL_EXCEPT);
162 // n = lrint(0x1p32);
163 // n = lrint(-0x1p31);
164 n = lrint(0x1p31+0.5);