18
18
19
19
type t = float32
20
20
21
- external float32_of_bits : int32 -> float32
21
+ external float32_of_bits : int32 -> t
22
22
= " caml_float32_of_bits_bytecode" " caml_float32_of_bits"
23
23
[@@ unboxed] [@@ noalloc]
24
24
25
- external neg : (float32 [@ local_opt]) -> (float32 [@ local_opt]) = " %negfloat32"
25
+ external neg : (t [@ local_opt]) -> (t [@ local_opt]) = " %negfloat32"
26
26
27
- external add :
28
- (float32 [@ local_opt]) -> (float32 [@ local_opt]) -> (float32 [@ local_opt])
27
+ external add : (t [@ local_opt]) -> (t [@ local_opt]) -> (t [@ local_opt])
29
28
= " %addfloat32"
30
29
31
- external sub :
32
- (float32 [@ local_opt]) -> (float32 [@ local_opt]) -> (float32 [@ local_opt])
30
+ external sub : (t [@ local_opt]) -> (t [@ local_opt]) -> (t [@ local_opt])
33
31
= " %subfloat32"
34
32
35
- external mul :
36
- (float32 [@ local_opt]) -> (float32 [@ local_opt]) -> (float32 [@ local_opt])
33
+ external mul : (t [@ local_opt]) -> (t [@ local_opt]) -> (t [@ local_opt])
37
34
= " %mulfloat32"
38
35
39
- external div :
40
- (float32 [@ local_opt]) -> (float32 [@ local_opt]) -> (float32 [@ local_opt])
36
+ external div : (t [@ local_opt]) -> (t [@ local_opt]) -> (t [@ local_opt])
41
37
= " %divfloat32"
42
38
43
- external pow : float32 -> float32 -> float32
44
- = " caml_power_float32_bytecode" " powf"
39
+ external pow : t -> t -> t = " caml_power_float32_bytecode" " powf"
45
40
[@@ unboxed] [@@ noalloc]
46
41
47
42
module Operators = struct
48
- external ( ~-. ) : (float32[@ local_opt]) -> (float32[@ local_opt])
49
- = " %negfloat32"
43
+ external ( ~-. ) : (t[@ local_opt]) -> (t[@ local_opt]) = " %negfloat32"
50
44
51
- external ( +. ) :
52
- (float32[@ local_opt]) -> (float32[@ local_opt]) -> (float32[@ local_opt])
45
+ external ( +. ) : (t[@ local_opt]) -> (t[@ local_opt]) -> (t[@ local_opt])
53
46
= " %addfloat32"
54
47
55
- external ( -. ) :
56
- (float32[@ local_opt]) -> (float32[@ local_opt]) -> (float32[@ local_opt])
48
+ external ( -. ) : (t[@ local_opt]) -> (t[@ local_opt]) -> (t[@ local_opt])
57
49
= " %subfloat32"
58
50
59
- external ( *. ) :
60
- (float32[@ local_opt]) -> (float32[@ local_opt]) -> (float32[@ local_opt])
51
+ external ( *. ) : (t[@ local_opt]) -> (t[@ local_opt]) -> (t[@ local_opt])
61
52
= " %mulfloat32"
62
53
63
- external ( /. ) :
64
- (float32[@ local_opt]) -> (float32[@ local_opt]) -> (float32[@ local_opt])
54
+ external ( /. ) : (t[@ local_opt]) -> (t[@ local_opt]) -> (t[@ local_opt])
65
55
= " %divfloat32"
66
56
67
- external ( ** ) : float32 -> float32 -> float32
68
- = " caml_power_float32_bytecode" " powf"
57
+ external ( ** ) : t -> t -> t = " caml_power_float32_bytecode" " powf"
69
58
[@@ unboxed] [@@ noalloc]
70
59
end
71
60
72
- external fma : float32 -> float32 -> float32 -> float32
73
- = " caml_fma_float32_bytecode" " fmaf"
61
+ external fma : t -> t -> t -> t = " caml_fma_float32_bytecode" " fmaf"
74
62
[@@ unboxed] [@@ noalloc]
75
63
76
- external rem : float32 -> float32 -> float32
77
- = " caml_fmod_float32_bytecode" " fmodf"
64
+ external rem : t -> t -> t = " caml_fmod_float32_bytecode" " fmodf"
78
65
[@@ unboxed] [@@ noalloc]
79
66
80
- external abs : (float32 [@ local_opt]) -> (float32 [@ local_opt]) = " %absfloat32"
67
+ external abs : (t [@ local_opt]) -> (t [@ local_opt]) = " %absfloat32"
81
68
82
69
let zero = 0. s
83
70
let one = 1. s
84
71
let minus_one = - 1. s
85
72
let infinity = float32_of_bits 0x7f800000l
86
73
let neg_infinity = float32_of_bits 0xff800000l
87
74
let nan = float32_of_bits 0x7f800001l
88
- let is_finite (x : float32 ) = sub x x = 0. s
89
- let is_infinite (x : float32 ) = div 1. s x = 0. s
90
- let is_nan (x : float32 ) = x <> x
75
+ let is_finite (x : t ) = sub x x = 0. s
76
+ let is_infinite (x : t ) = div 1. s x = 0. s
77
+ let is_nan (x : t ) = x <> x
91
78
let pi = 0x1 .921 fb6p+ 1 s
92
79
let max_float = float32_of_bits 0x7f7fffffl
93
80
let min_float = float32_of_bits 0x00800000l
94
81
let epsilon = float32_of_bits 0x34000000l
95
82
96
- external of_int : int -> float32 = " %float32ofint"
97
- external to_int : (float32 [@ local_opt]) -> int = " %intoffloat32"
98
- external of_float : (float [@ local_opt]) -> float32 = " %float32offloat"
99
- external to_float : (float32 [@ local_opt]) -> float = " %floatoffloat32"
83
+ external of_int : int -> t = " %float32ofint"
84
+ external to_int : (t [@ local_opt]) -> int = " %intoffloat32"
85
+ external of_float : (float [@ local_opt]) -> t = " %float32offloat"
86
+ external to_float : (t [@ local_opt]) -> float = " %floatoffloat32"
100
87
101
- external of_bits : (int32 [@ local_opt]) -> float32
88
+ external of_bits : (int32 [@ local_opt]) -> t
102
89
= " caml_float32_of_bits_bytecode" " caml_float32_of_bits"
103
90
[@@ unboxed] [@@ noalloc] [@@ builtin]
104
91
105
- external to_bits : (float32 [@ local_opt]) -> int32
92
+ external to_bits : (t [@ local_opt]) -> int32
106
93
= " caml_float32_to_bits_bytecode" " caml_float32_to_bits"
107
94
[@@ unboxed] [@@ noalloc] [@@ builtin]
108
95
109
- external of_string : string -> float32 = " caml_float32_of_string"
96
+ external of_string : string -> t = " caml_float32_of_string"
110
97
111
98
let of_string_opt s = try Some (of_string s) with Failure _ -> None
112
99
113
- external format : string -> float32 -> string = " caml_format_float32"
100
+ external format : string -> t -> string = " caml_format_float32"
114
101
115
102
let to_string f = Stdlib. valid_float_lexem (format " %.9g" f)
116
103
@@ -121,153 +108,150 @@ type fpclass = Stdlib.fpclass =
121
108
| FP_infinite
122
109
| FP_nan
123
110
124
- external classify_float : (float32 [@ unboxed]) -> fpclass
111
+ external classify_float : (t [@ unboxed]) -> fpclass
125
112
= " caml_classify_float32_bytecode" " caml_classify_float32"
126
113
[@@ noalloc]
127
114
128
- external sqrt : float32 -> float32 = " caml_sqrt_float32_bytecode" " sqrtf"
115
+ external sqrt : t -> t = " caml_sqrt_float32_bytecode" " sqrtf"
129
116
[@@ unboxed] [@@ noalloc] [@@ builtin]
130
117
131
- external cbrt : float32 -> float32 = " caml_cbrt_float32_bytecode" " cbrtf"
118
+ external cbrt : t -> t = " caml_cbrt_float32_bytecode" " cbrtf"
132
119
[@@ unboxed] [@@ noalloc]
133
120
134
- external exp : float32 -> float32 = " caml_exp_float32_bytecode" " expf"
121
+ external exp : t -> t = " caml_exp_float32_bytecode" " expf"
135
122
[@@ unboxed] [@@ noalloc]
136
123
137
- external exp2 : float32 -> float32 = " caml_exp2_float32_bytecode" " exp2f"
124
+ external exp2 : t -> t = " caml_exp2_float32_bytecode" " exp2f"
138
125
[@@ unboxed] [@@ noalloc]
139
126
140
- external log : float32 -> float32 = " caml_log_float32_bytecode" " logf"
127
+ external log : t -> t = " caml_log_float32_bytecode" " logf"
141
128
[@@ unboxed] [@@ noalloc]
142
129
143
- external log10 : float32 -> float32 = " caml_log10_float32_bytecode" " log10f"
130
+ external log10 : t -> t = " caml_log10_float32_bytecode" " log10f"
144
131
[@@ unboxed] [@@ noalloc]
145
132
146
- external log2 : float32 -> float32 = " caml_log2_float32_bytecode" " log2f"
133
+ external log2 : t -> t = " caml_log2_float32_bytecode" " log2f"
147
134
[@@ unboxed] [@@ noalloc]
148
135
149
- external expm1 : float32 -> float32 = " caml_expm1_float32_bytecode" " expm1f"
136
+ external expm1 : t -> t = " caml_expm1_float32_bytecode" " expm1f"
150
137
[@@ unboxed] [@@ noalloc]
151
138
152
- external log1p : float32 -> float32 = " caml_log1p_float32_bytecode" " log1pf"
139
+ external log1p : t -> t = " caml_log1p_float32_bytecode" " log1pf"
153
140
[@@ unboxed] [@@ noalloc]
154
141
155
- external cos : float32 -> float32 = " caml_cos_float32_bytecode" " cosf"
142
+ external cos : t -> t = " caml_cos_float32_bytecode" " cosf"
156
143
[@@ unboxed] [@@ noalloc]
157
144
158
- external sin : float32 -> float32 = " caml_sin_float32_bytecode" " sinf"
145
+ external sin : t -> t = " caml_sin_float32_bytecode" " sinf"
159
146
[@@ unboxed] [@@ noalloc]
160
147
161
- external tan : float32 -> float32 = " caml_tan_float32_bytecode" " tanf"
148
+ external tan : t -> t = " caml_tan_float32_bytecode" " tanf"
162
149
[@@ unboxed] [@@ noalloc]
163
150
164
- external acos : float32 -> float32 = " caml_acos_float32_bytecode" " acosf"
151
+ external acos : t -> t = " caml_acos_float32_bytecode" " acosf"
165
152
[@@ unboxed] [@@ noalloc]
166
153
167
- external asin : float32 -> float32 = " caml_asin_float32_bytecode" " asinf"
154
+ external asin : t -> t = " caml_asin_float32_bytecode" " asinf"
168
155
[@@ unboxed] [@@ noalloc]
169
156
170
- external atan : float32 -> float32 = " caml_atan_float32_bytecode" " atanf"
157
+ external atan : t -> t = " caml_atan_float32_bytecode" " atanf"
171
158
[@@ unboxed] [@@ noalloc]
172
159
173
- external atan2 : float32 -> float32 -> float32
174
- = " caml_atan2_float32_bytecode" " atan2f"
160
+ external atan2 : t -> t -> t = " caml_atan2_float32_bytecode" " atan2f"
175
161
[@@ unboxed] [@@ noalloc]
176
162
177
- external hypot : float32 -> float32 -> float32
178
- = " caml_hypot_float32_bytecode" " hypotf"
163
+ external hypot : t -> t -> t = " caml_hypot_float32_bytecode" " hypotf"
179
164
[@@ unboxed] [@@ noalloc]
180
165
181
- external cosh : float32 -> float32 = " caml_cosh_float32_bytecode" " coshf"
166
+ external cosh : t -> t = " caml_cosh_float32_bytecode" " coshf"
182
167
[@@ unboxed] [@@ noalloc]
183
168
184
- external sinh : float32 -> float32 = " caml_sinh_float32_bytecode" " sinhf"
169
+ external sinh : t -> t = " caml_sinh_float32_bytecode" " sinhf"
185
170
[@@ unboxed] [@@ noalloc]
186
171
187
- external tanh : float32 -> float32 = " caml_tanh_float32_bytecode" " tanhf"
172
+ external tanh : t -> t = " caml_tanh_float32_bytecode" " tanhf"
188
173
[@@ unboxed] [@@ noalloc]
189
174
190
- external acosh : float32 -> float32 = " caml_acosh_float32_bytecode" " acoshf"
175
+ external acosh : t -> t = " caml_acosh_float32_bytecode" " acoshf"
191
176
[@@ unboxed] [@@ noalloc]
192
177
193
- external asinh : float32 -> float32 = " caml_asinh_float32_bytecode" " asinhf"
178
+ external asinh : t -> t = " caml_asinh_float32_bytecode" " asinhf"
194
179
[@@ unboxed] [@@ noalloc]
195
180
196
- external atanh : float32 -> float32 = " caml_atanh_float32_bytecode" " atanhf"
181
+ external atanh : t -> t = " caml_atanh_float32_bytecode" " atanhf"
197
182
[@@ unboxed] [@@ noalloc]
198
183
199
- external erf : float32 -> float32 = " caml_erf_float32_bytecode" " erff"
184
+ external erf : t -> t = " caml_erf_float32_bytecode" " erff"
200
185
[@@ unboxed] [@@ noalloc]
201
186
202
- external erfc : float32 -> float32 = " caml_erfc_float32_bytecode" " erfcf"
187
+ external erfc : t -> t = " caml_erfc_float32_bytecode" " erfcf"
203
188
[@@ unboxed] [@@ noalloc]
204
189
205
- external trunc : float32 -> float32 = " caml_trunc_float32_bytecode" " truncf"
190
+ external trunc : t -> t = " caml_trunc_float32_bytecode" " truncf"
206
191
[@@ unboxed] [@@ noalloc]
207
192
208
- external round : float32 -> float32 = " caml_round_float32_bytecode" " roundf"
193
+ external round : t -> t = " caml_round_float32_bytecode" " roundf"
209
194
[@@ unboxed] [@@ noalloc]
210
195
211
- external ceil : float32 -> float32 = " caml_ceil_float32_bytecode" " ceilf"
196
+ external ceil : t -> t = " caml_ceil_float32_bytecode" " ceilf"
212
197
[@@ unboxed] [@@ noalloc]
213
198
214
- external floor : float32 -> float32 = " caml_floor_float32_bytecode" " floorf"
199
+ external floor : t -> t = " caml_floor_float32_bytecode" " floorf"
215
200
[@@ unboxed] [@@ noalloc]
216
201
217
202
let is_integer x = x = trunc x && is_finite x
218
203
219
- external next_after : float32 -> float32 -> float32
204
+ external next_after : t -> t -> t
220
205
= " caml_nextafter_float32_bytecode" " nextafterf"
221
206
[@@ unboxed] [@@ noalloc]
222
207
223
208
let succ x = next_after x infinity
224
209
let pred x = next_after x neg_infinity
225
210
226
- external copy_sign : float32 -> float32 -> float32
227
- = " caml_copysign_float32_bytecode" " copysignf"
211
+ external copy_sign : t -> t -> t = " caml_copysign_float32_bytecode" " copysignf"
228
212
[@@ unboxed] [@@ noalloc]
229
213
230
- external sign_bit : (float32 [@ unboxed]) -> bool
214
+ external sign_bit : (t [@ unboxed]) -> bool
231
215
= " caml_signbit_float32_bytecode" " caml_signbit_float32"
232
216
[@@ noalloc]
233
217
234
- external frexp : float32 -> float32 * int = " caml_frexp_float32"
218
+ external frexp : t -> t * int = " caml_frexp_float32"
235
219
236
- external ldexp : (float32 [@ unboxed]) -> (int [@ untagged]) -> (float32 [@ unboxed])
220
+ external ldexp : (t [@ unboxed]) -> (int [@ untagged]) -> (t [@ unboxed])
237
221
= " caml_ldexp_float32_bytecode" " caml_ldexp_float32"
238
222
[@@ noalloc]
239
223
240
- external modf : float32 -> float32 * float32 = " caml_modf_float32"
241
- external compare : float32 -> float32 -> int = " %compare"
224
+ external modf : t -> t * t = " caml_modf_float32"
225
+ external compare : t -> t -> int = " %compare"
242
226
243
227
let equal x y = compare x y = 0
244
228
245
- let [@ inline] min (x : float32 ) (y : float32 ) =
229
+ let [@ inline] min (x : t ) (y : t ) =
246
230
if y > x || ((not (sign_bit y)) && sign_bit x) then if is_nan y then y else x
247
231
else if is_nan x then x
248
232
else y
249
233
250
- let [@ inline] max (x : float32 ) (y : float32 ) =
234
+ let [@ inline] max (x : t ) (y : t ) =
251
235
if y > x || ((not (sign_bit y)) && sign_bit x) then if is_nan x then x else y
252
236
else if is_nan y then y
253
237
else x
254
238
255
- let [@ inline] min_max (x : float32 ) (y : float32 ) =
239
+ let [@ inline] min_max (x : t ) (y : t ) =
256
240
if is_nan x || is_nan y then (nan, nan)
257
241
else if y > x || ((not (sign_bit y)) && sign_bit x) then (x, y)
258
242
else (y, x)
259
243
260
- let [@ inline] min_num (x : float32 ) (y : float32 ) =
244
+ let [@ inline] min_num (x : t ) (y : t ) =
261
245
if y > x || ((not (sign_bit y)) && sign_bit x) then if is_nan x then y else x
262
246
else if is_nan y then x
263
247
else y
264
248
265
- let [@ inline] max_num (x : float32 ) (y : float32 ) =
249
+ let [@ inline] max_num (x : t ) (y : t ) =
266
250
if y > x || ((not (sign_bit y)) && sign_bit x) then if is_nan y then x else y
267
251
else if is_nan x then y
268
252
else x
269
253
270
- let [@ inline] min_max_num (x : float32 ) (y : float32 ) =
254
+ let [@ inline] min_max_num (x : t ) (y : t ) =
271
255
if is_nan x then (y, y)
272
256
else if is_nan y then (x, x)
273
257
else if y > x || ((not (sign_bit y)) && sign_bit x) then (x, y)
0 commit comments