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

Xin Wang dram.wang at gmail.com
Wed Jan 18 16:17:30 AEDT 2023


On 1/18/23, M McDonough <foolkingcrown at gmail.com> wrote:
> 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.
>

Thanks for your idea! I think I should do it the other way around,
float_to_uint64. :D

Regards,
Xin Wang


More information about the users mailing list