(0003923)

xleroy

20070221 15:14


The documentation for int_of_float does warn that the result is unspecified if the float argument falls outside the range of representable integers. I will add "or if the argument is NaN".
But, more generally, int_of_float inherits its semantics from that of the double > long conversion of C or that of the corresponding machine instruction, just like other integer and float arithmetic operations in Caml. I don't think it would make sense to raise an exception in case of overflow for int_of_float but not for other arithmetic operations.
Note that if this is a serious problem in your application, it is possible to define a safer version of int_of_float, for instance:
let min_float_int = (* appropriate float constant close to min_int *)
let max_float_int = (* appropriate float constant close to max_int *)
let safe_int_of_float f =
if f >= min_float_int && f <= max_float_int
then int_of_float f
else invalid_argument "safe_int_of_float"

