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