Premature conversion
Regan Heath
regan at netmail.co.nz
Wed Nov 7 02:42:28 PST 2007
Regan Heath wrote:
> Hans-Eric Grönlund wrote:
>> The code below:
>>
>> real a = 5/2;
>>
>> results in the, to me, unexpected value of 2 for the variable a.
>> What's the rationale behind this behavior?
>> There are more details on my weblog:
>> http://www.hans-eric.com/2007/11/06/d-gotchas/
>
> You are performing 'integer' division then converting the result to a
> real. With integer division 5/2 is 2 remainder 1.
>
> This code behaves as you would expect (I suspect):
>
> real a = 5.0/2.0;
>
> Here 5.0 and 2.0 are floating point literals, not integer literals so
> floating point division is performed resulting in 2.5.
>
> These also work as you'd expect:
>
> real a = 5/2.0;
> real a = 5.0/2;
>
> because D will promote integer literals to floating point in these cases.
>
> I'm sure there are some rules on the D website for how and when and why
> it promotes integers to floats and so on but I can't find them at present.
I should have read your weblog first :)
Regan
More information about the Digitalmars-d-learn
mailing list