diff --git a/ml-proto/src/given/float32.ml b/ml-proto/src/given/float32.ml index 0c2524dcee..e30eda5a6c 100644 --- a/ml-proto/src/given/float32.ml +++ b/ml-proto/src/given/float32.ml @@ -53,7 +53,8 @@ let nearest x = let d = Pervasives.floor xf in let um = abs_float (xf -. u) in let dm = abs_float (xf -. d) in - let u_or_d = um < dm || ((um = dm) && (mod_float u 2.0 = 0.0)) in + let u_or_d = um < dm || + (um = dm && let h = u /. 2. in Pervasives.floor h = h) in let f = if u_or_d then u else d in bits_of_arith f diff --git a/ml-proto/src/given/float64.ml b/ml-proto/src/given/float64.ml index 6ce12bda36..d2a54f43d4 100644 --- a/ml-proto/src/given/float64.ml +++ b/ml-proto/src/given/float64.ml @@ -53,7 +53,8 @@ let nearest x = let d = Pervasives.floor xf in let um = abs_float (xf -. u) in let dm = abs_float (xf -. d) in - let u_or_d = um < dm || ((um = dm) && (mod_float u 2.0 = 0.0)) in + let u_or_d = um < dm || + (um = dm && let h = u /. 2. in Pervasives.floor h = h) in let f = if u_or_d then u else d in bits_of_arith f