2015-09-02 10:56 GMT-07:00 Andreas Rossberg : > Does the Ocaml implementation make guarantees about the stable > representation of floats? In particular, if I use Int64.float_of_bits to > create a particular NaN representation, am I guaranteed that its bit > pattern is maintained no matter where the value is stored or passed? > It depends on the underlying hardware. For instance, with x86-32 bits, some FP moves go through the x87 FP stack, undergoing a double -> extended -> double conversion. These conversions turn signaling NaNs into quiet NaNs, and I'm not sure they preserve the other bits of the NaN payload. On other platforms, esp. x86-64 bits, I'm pretty confident that NaN bits are preserved by copying and parameter passing. > > We are currently in the process of implementing a reference interpreter > for a little low-level language, and that tries to be as accurate as > possible about float representations. > One possibility would be to represent your floats as int64 values (= their bit-level representation), and convert only when you operate over them, e.g. let fp_add x y = Int64.bits_of_float (Int64.float_of_bits x +. Int64.float_of_bits y) Best, - Xavier