From be2d3a5f941dd0fefd1d31c3dd98a16fdedb5294 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Thu, 17 Sep 2015 06:03:40 -0700 Subject: [PATCH] Avoid relying on correct rounding of mod_float. --- ml-proto/src/given/float32.ml | 3 ++- ml-proto/src/given/float64.ml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ml-proto/src/given/float32.ml b/ml-proto/src/given/float32.ml index 3991d56de3..735fe195dc 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 da49d36dc8..ae5786fa08 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