Skip to content

Commit a3d9cd6

Browse files
authored
flambda-backend: Make float32 NaN quiet (#2670)
* make f32.nan quiet * add quiet/signal * macos doesn't return snan
1 parent bf2a8bf commit a3d9cd6

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

otherlibs/stdlib_beta/float32.ml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ let one = 1.s
7171
let minus_one = -1.s
7272
let infinity = float32_of_bits 0x7f800000l
7373
let neg_infinity = float32_of_bits 0xff800000l
74-
let nan = float32_of_bits 0x7f800001l
74+
let quiet_nan = float32_of_bits 0x7fc00001l
75+
let signaling_nan = float32_of_bits 0x7f800001l
76+
let nan = quiet_nan
7577
let is_finite (x : t) = sub x x = 0.s
7678
let is_infinite (x : t) = div 1.s x = 0.s
7779
let is_nan (x : t) = x <> x

otherlibs/stdlib_beta/float32.mli

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,16 @@ val nan : t
128128
argument returns [nan] as result, unless otherwise specified in
129129
IEEE 754 standard. As for floating-point comparisons,
130130
[=], [<], [<=], [>] and [>=] return [false] and [<>] returns [true]
131-
if one or both of their arguments is [nan]. *)
131+
if one or both of their arguments is [nan].
132+
133+
Equivalent to [quiet_nan]. *)
134+
135+
val signaling_nan : t
136+
(** Signaling NaN. The corresponding signals do not raise OCaml exception,
137+
but the value can be useful for interoperability with C libraries. *)
138+
139+
val quiet_nan : t
140+
(** Quiet NaN. *)
132141

133142
val pi : t
134143
(** The constant pi. *)

0 commit comments

Comments
 (0)