timtran
December 14, 2005, 5:09pm
1
Hi,
Is there a problem to use the integer type Ulong64_t (or Long64_t) on a 32-bits machine?
I test the following macro and I got a wrong answer when the number is larger than 32 bits. Your suggestions are most appreciated. Tim
Macro:
{
ULong64_t test64;
test64=4000000000ULL;
cout << test64<< endl;
test64=5000000000ULL;
cout << test64<< endl;
}
Answers:
4000000000ULL = 4000000000
5000000000ULL = 705032704
brun
December 15, 2005, 3:44pm
2
When reporting a problem, please ALWAYS indicate which version and OS you ar using. Your tests work correctly with the current ROOT versions.
Rene
timtran
December 15, 2005, 3:49pm
3
Hi, continuing on the previous e-mail.
I found the workaround provided by Masa Goto. This work around works on a Linux machine running Red Hat Linux Enterprise 4: e.g.,
ULong64_t test= 10000000000ULL*10; //This works
or
ULong64_t=(ULong64_t) 101000 1000*10; // this also works
However, this workaround does not seem to work on the precompiled Windows binary version (Win32GDK, compile with VC++ 7.1) running on Windows XP.
Is there a similar workaround for the Windows version?
or do I need to compile the code on a 64 bit machine?
Tim
pcanal
December 19, 2005, 4:42pm
4
this is indeed a bug on windows. We will try to correct this.
Cheers,
Philippe.
pcanal
December 19, 2005, 5:33pm
5
Thank you for reporting this problem. It turns out that it was only a printing/output problem. The variable already had internally the correct value. For example see the result of:
root [0] ULong64_t test= 10000000000ULL*10; //This works
root [1] Form("%llu",test)
Anyway this problem is now fixed in the CINT cvs repository and will be upload into the ROOT cvs repository later this week.
Cheers,
Philippe.