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.