[m-users.] How to convert float to uint64?

M McDonough foolkingcrown at gmail.com
Wed Jan 18 14:37:13 AEDT 2023


On Tue, 17 Jan 2023, dram.wang at gmail.com wrote:

> While uint64 can be converted to float using float.cast_from_uint64/1 in Mercury, but I can not find a way to convert float to
> uint64.
>
> Am I missing something?

A quick hack you could use to make this work by "doing whatever C does":

:- func uint64_to_float(uint64) = float.
% Somewhere later...
:- pragma foreign_proc("C", uint64_to_float(U::in) = (F::out),
    [will_not_call_mercury, promise_pure, thread_safe,
    will_not_throw_exception, may_duplicate, does_not_affect_liveness],
    " F = U; ").

Similar code could be used for Java and C#. This method is going to
cause weird or unexpected stuff to happen with very large integer
values, which will be particularly easy on single-precision-float
grades.


More information about the users mailing list