On Thursday, 14 February 2013 at 15:44:25 UTC, Sparsh Mittal wrote:
Here is the program:

import std.stdio;

const long DIM = 1024*1024*1024*1024*4;
void main()
{
writeln(" DIM  is ", DIM);
writeln(" Value ", 1024*1024*1024*1024*4);
writeln(" Max ", long.max);

}

I compiled it:
gdc -frelease -O3 temp.d -o t1 ; ./t1
 DIM  is 0
 Value 0
 Max 9223372036854775807

Can you please tell, why it is taking DIM as zero? If I reduce DIM, it works fine. It is strange.

It's not because "DIM" is a long, that "1024*1024*1024*1024*4" is a long. Case in point, it is calculated as an int, and becomes 0.

Try it with:
"1UL * 1024*1024*1024*1024*4"
or
"1024UL*1024*1024*1024*4"
or
"cast(ulong)1024*1024*1024*1024*4"
To force the actual calculation into long mode, and you'll get the desired result.

Or, just "2UL^^42", depending on just what you want "DIM" to represent.

Reply via email to