1
1
// gcc -Wall -W -lm double-to-float-with-rounding-modes.c -o double-to-float-with-rounding-modes -frounding-math -fsignaling-nans -ffp-contract=off -msse2 -mfpmath=sse
2
2
3
3
#ifdef __GNUC__
4
- #include <assert.h>
5
- #include <fenv.h>
6
- #include <math.h>
4
+ # include <assert.h>
5
+ # include <fenv.h>
6
+ # include <math.h>
7
7
8
8
float setRoundingModeAndCast (int mode , double d )
9
9
{
@@ -25,136 +25,136 @@ int main(void)
25
25
// 0x1.fffffep+127f is the largest binary32 float so
26
26
// these should all be representable as floats...
27
27
test (FE_TONEAREST , 0x1.fffffep+127 , 0x1.fffffep+127 );
28
- #ifdef FE_UPWARD
28
+ # ifdef FE_UPWARD
29
29
test (FE_UPWARD , 0x1.fffffep+127 , 0x1.fffffep+127 );
30
- #endif
31
- #ifdef FE_DOWNWARD
30
+ # endif
31
+ # ifdef FE_DOWNWARD
32
32
test (FE_DOWNWARD , 0x1.fffffep+127 , 0x1.fffffep+127 );
33
- #endif
33
+ # endif
34
34
test (FE_TOWARDZERO , 0x1.fffffep+127 , 0x1.fffffep+127 );
35
35
36
36
// Likewise, this should be an obvious sanity check
37
37
test (FE_TONEAREST , + INFINITY , + INFINITY );
38
- #ifdef FE_UPWARD
38
+ # ifdef FE_UPWARD
39
39
test (FE_UPWARD , + INFINITY , + INFINITY );
40
- #endif
41
- #ifdef FE_DOWNWARD
40
+ # endif
41
+ # ifdef FE_DOWNWARD
42
42
test (FE_DOWNWARD , + INFINITY , + INFINITY );
43
- #endif
43
+ # endif
44
44
test (FE_TOWARDZERO , + INFINITY , + INFINITY );
45
45
46
46
// Nearer to 0x1.fffffep+127 than to 0x1.000000p+128
47
47
test (FE_TONEAREST , 0x1.fffffe0000001p+127 , 0x1.fffffep+127 );
48
- #ifdef FE_UPWARD
48
+ # ifdef FE_UPWARD
49
49
test (FE_UPWARD , 0x1.fffffe0000001p+127 , + INFINITY );
50
- #endif
51
- #ifdef FE_DOWNWARD
50
+ # endif
51
+ # ifdef FE_DOWNWARD
52
52
test (FE_DOWNWARD , 0x1.fffffe0000001p+127 , 0x1.fffffep+127 );
53
- #endif
53
+ # endif
54
54
test (FE_TOWARDZERO , 0x1.fffffe0000001p+127 , 0x1.fffffep+127 );
55
55
56
56
// 0x1.fffffefffffffp+127 is immediately below half way
57
57
test (FE_TONEAREST , 0x1.fffffefffffffp+127 , 0x1.fffffep+127 );
58
- #ifdef FE_UPWARD
58
+ # ifdef FE_UPWARD
59
59
test (FE_UPWARD , 0x1.fffffefffffffp+127 , + INFINITY );
60
- #endif
61
- #ifdef FE_DOWNWARD
60
+ # endif
61
+ # ifdef FE_DOWNWARD
62
62
test (FE_DOWNWARD , 0x1.fffffefffffffp+127 , 0x1.fffffep+127 );
63
- #endif
63
+ # endif
64
64
test (FE_TOWARDZERO , 0x1.fffffefffffffp+127 , 0x1.fffffep+127 );
65
65
66
66
// Half way
67
67
test (FE_TONEAREST , 0x1.ffffffp+127 , + INFINITY );
68
- #ifdef FE_UPWARD
68
+ # ifdef FE_UPWARD
69
69
test (FE_UPWARD , 0x1.ffffffp+127 , + INFINITY );
70
- #endif
71
- #ifdef FE_DOWNWARD
70
+ # endif
71
+ # ifdef FE_DOWNWARD
72
72
test (FE_DOWNWARD , 0x1.ffffffp+127 , 0x1.fffffep+127 );
73
- #endif
73
+ # endif
74
74
test (FE_TOWARDZERO , 0x1.ffffffp+127 , 0x1.fffffep+127 );
75
75
76
76
// Larger
77
77
test (FE_TONEAREST , 0x1.0p+128 , + INFINITY );
78
- #ifdef FE_UPWARD
78
+ # ifdef FE_UPWARD
79
79
test (FE_UPWARD , 0x1.0p+128 , + INFINITY );
80
- #endif
81
- #ifdef FE_DOWNWARD
80
+ # endif
81
+ # ifdef FE_DOWNWARD
82
82
test (FE_DOWNWARD , 0x1.0p+128 , 0x1.fffffep+127 );
83
- #endif
83
+ # endif
84
84
test (FE_TOWARDZERO , 0x1.0p+128 , 0x1.fffffep+127 );
85
85
86
86
// Huge
87
87
test (FE_TONEAREST , 0x1.fffffffffffffp+1023 , + INFINITY );
88
- #ifdef FE_UPWARD
88
+ # ifdef FE_UPWARD
89
89
test (FE_UPWARD , 0x1.fffffffffffffp+1023 , + INFINITY );
90
- #endif
91
- #ifdef FE_DOWNWARD
90
+ # endif
91
+ # ifdef FE_DOWNWARD
92
92
test (FE_DOWNWARD , 0x1.fffffffffffffp+1023 , 0x1.fffffep+127 );
93
- #endif
93
+ # endif
94
94
test (FE_TOWARDZERO , 0x1.fffffffffffffp+1023 , 0x1.fffffep+127 );
95
95
96
96
// Same again but negative
97
97
test (FE_TONEAREST , -0x1.fffffep+127 , -0x1.fffffep+127 );
98
- #ifdef FE_UPWARD
98
+ # ifdef FE_UPWARD
99
99
test (FE_UPWARD , -0x1.fffffep+127 , -0x1.fffffep+127 );
100
- #endif
101
- #ifdef FE_DOWNWARD
100
+ # endif
101
+ # ifdef FE_DOWNWARD
102
102
test (FE_DOWNWARD , -0x1.fffffep+127 , -0x1.fffffep+127 );
103
- #endif
103
+ # endif
104
104
test (FE_TOWARDZERO , -0x1.fffffep+127 , -0x1.fffffep+127 );
105
105
106
106
test (FE_TONEAREST , - INFINITY , - INFINITY );
107
- #ifdef FE_UPWARD
107
+ # ifdef FE_UPWARD
108
108
test (FE_UPWARD , - INFINITY , - INFINITY );
109
- #endif
110
- #ifdef FE_DOWNWARD
109
+ # endif
110
+ # ifdef FE_DOWNWARD
111
111
test (FE_DOWNWARD , - INFINITY , - INFINITY );
112
- #endif
112
+ # endif
113
113
test (FE_TOWARDZERO , - INFINITY , - INFINITY );
114
114
115
115
test (FE_TONEAREST , -0x1.fffffe0000001p+127 , -0x1.fffffep+127 );
116
- #ifdef FE_UPWARD
116
+ # ifdef FE_UPWARD
117
117
test (FE_UPWARD , -0x1.fffffe0000001p+127 , -0x1.fffffep+127 );
118
- #endif
119
- #ifdef FE_DOWNWARD
118
+ # endif
119
+ # ifdef FE_DOWNWARD
120
120
test (FE_DOWNWARD , -0x1.fffffe0000001p+127 , - INFINITY );
121
- #endif
121
+ # endif
122
122
test (FE_TOWARDZERO , -0x1.fffffe0000001p+127 , -0x1.fffffep+127 );
123
123
124
124
test (FE_TONEAREST , -0x1.fffffefffffffp+127 , -0x1.fffffep+127 );
125
- #ifdef FE_UPWARD
125
+ # ifdef FE_UPWARD
126
126
test (FE_UPWARD , -0x1.fffffefffffffp+127 , -0x1.fffffep+127 );
127
- #endif
128
- #ifdef FE_DOWNWARD
127
+ # endif
128
+ # ifdef FE_DOWNWARD
129
129
test (FE_DOWNWARD , -0x1.fffffefffffffp+127 , - INFINITY );
130
- #endif
130
+ # endif
131
131
test (FE_TOWARDZERO , -0x1.fffffefffffffp+127 , -0x1.fffffep+127 );
132
132
133
133
test (FE_TONEAREST , -0x1.ffffffp+127 , - INFINITY );
134
- #ifdef FE_UPWARD
134
+ # ifdef FE_UPWARD
135
135
test (FE_UPWARD , -0x1.ffffffp+127 , -0x1.fffffep+127 );
136
- #endif
137
- #ifdef FE_DOWNWARD
136
+ # endif
137
+ # ifdef FE_DOWNWARD
138
138
test (FE_DOWNWARD , -0x1.ffffffp+127 , - INFINITY );
139
- #endif
139
+ # endif
140
140
test (FE_TOWARDZERO , -0x1.ffffffp+127 , -0x1.fffffep+127 );
141
141
142
142
test (FE_TONEAREST , -0x1.0p+128 , - INFINITY );
143
- #ifdef FE_UPWARD
143
+ # ifdef FE_UPWARD
144
144
test (FE_UPWARD , -0x1.0p+128 , -0x1.fffffep+127 );
145
- #endif
146
- #ifdef FE_DOWNWARD
145
+ # endif
146
+ # ifdef FE_DOWNWARD
147
147
test (FE_DOWNWARD , -0x1.0p+128 , - INFINITY );
148
- #endif
148
+ # endif
149
149
test (FE_TOWARDZERO , -0x1.0p+128 , -0x1.fffffep+127 );
150
150
151
151
test (FE_TONEAREST , -0x1.fffffffffffffp+1023 , - INFINITY );
152
- #ifdef FE_UPWARD
152
+ # ifdef FE_UPWARD
153
153
test (FE_UPWARD , -0x1.fffffffffffffp+1023 , -0x1.fffffep+127 );
154
- #endif
155
- #ifdef FE_DOWNWARD
154
+ # endif
155
+ # ifdef FE_DOWNWARD
156
156
test (FE_DOWNWARD , -0x1.fffffffffffffp+1023 , - INFINITY );
157
- #endif
157
+ # endif
158
158
test (FE_TOWARDZERO , -0x1.fffffffffffffp+1023 , -0x1.fffffep+127 );
159
159
#endif
160
160
0 commit comments