2015-09-02 10:56 GMT-07:00 Andreas Rossberg <rossberg@mpi-sws.org>:
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