Casting double to ulong weirdness

bachmeier via Digitalmars-d digitalmars-d at puremagic.com
Tue Aug 25 07:06:01 PDT 2015


On Tuesday, 25 August 2015 at 11:14:35 UTC, Steven Schveighoffer 
wrote:
> On 8/24/15 5:34 PM, "=?UTF-8?B?Ik3DoXJjaW8=?= Martins\" 
> <marcioapm at gmail.com>\"" wrote:
>> On Monday, 24 August 2015 at 21:03:50 UTC, Steven 
>> Schveighoffer wrote:
>
>>> I understand the inconsistency, and I agree it is an issue 
>>> that should
>>> be examined. But the issue is entirely avoidable by not using
>>> incorrect methods to convert from floating point to integer 
>>> after
>>> floating point operations introduce some small level of error.
>>>
>>> Perhaps there is some way to make it properly round in this 
>>> case, but
>>> I guarantee it will not fix all floating point errors.
>>>
>>
>> What is the correct way to truncate, not round, a 
>> floating-point value
>> to an integer?
>
> auto result = cast(ulong)(x * 10.0 + x.epsilon);
>
> -Steve

That will work in this case (or maybe not, as Marcio's other post 
shows) but it's still not a general solution. You're imposing the 
assumption that anything sufficiently close to an integer value 
is that integer. Truncating a floating point number is not a 
well-defined exercise because you only know an interval that 
holds the true value.


More information about the Digitalmars-d mailing list