Why are some casts from floating point to integral done differently
Don
nospam at nospam.com
Mon Mar 15 12:06:32 PDT 2010
Aldo Nunez wrote:
> Don Wrote:
>
>> The cast(uint) case is clearly a bug. Please file it in Bugzilla.
>
> I'll file a bug, but...
>
>> This happens because there are no built-in functions for converting from
>> float to unsigned. Values between int.max and uint.max need to be
>> treated specially.
>>
>>
>
> You're right, but why isn't it done for (float, double -> ulong) like it's done for (real -> ulong), where it's a simple conversion to long plus a fixup. It's not like (float -> real -> ulong) will introduce more precise non-zero bits (or will it?).
>
> Then there's the case of (float, double, real -> uint). Why isn't this done like (float, double, real -> ushort), where a simple conversion to int is done, and then the result is truncated to ushort? Wouldn't it work the same to do a simple conversion to long, and then truncate the result to uint?
>
> I'm just trying to understand why these simple, yet seemingly just as accurate methods weren't used.
I don't know, but it's probably historical. The real->ulong code is
quite recent (about a year old), but the other ones are ancient. They
may even come from the 386 days.
More information about the Digitalmars-d
mailing list