gcc compilation on amd opteron and precision
Muge Unel
m.unel1@physics.ox.ac.uk
Sat May 7 12:14:00 GMT 2005
HI gcc-guru's,
I have a question:
i am having my first compiling experiences on an opteron machine+64bit
arch and testing various compilers and options.
This is on
RH ES x86_64 x86_64 x86_64 GNU/Linux AMD Opteron Processor 248, using
"/usr/bin/gcc -O3" with either an -m32 or -m64 option.
My main concern is how to obtain the maximum precision from the
architecture, expecially 128-bit quad. precision.
The first thing i checked is the sizes of data types.
I think i get the correct behaviour for that:
for example, 16B with 64bit compilation and 12B for 32, for a long
double size.
however, the results of my simple calculations do not seem to make
sense.
for example, code fragments like:
printf ("for a long double \n");
p= (long double) 1.0 / (long double) 3.0;
q = (long double) p * (long double) 3.0 - (long double) 1.0;
printf ("1 /3 is: %.30e\n", p);
printf ("(1 / 3) x 3 - 1 is: %.30e\n", q);
give me:
-m32:
for a float
1 / 3 is: 3.333333432674407958984375000000e-01 vs 3.3
(1 / 3) x 3 - 1 is: 0.000000000000000000000000000000e+00 vs 0.0
for a double
1 / 3 is: 3.333333333333333148296162562474e-01
(1 / 3) x 3 - 1 is: 0.000000000000000000000000000000e+00
for a long double
1 /3 is: -3.720662080996989039630925438211e-103
(1 / 3) x 3 - 1 is: 0.000000000000000000000000000000e+00
-m64:
for a float
1 / 3 is: 3.333333432674407958984375000000e-01 vs 3.3
(1 / 3) x 3 - 1 is: 0.000000000000000000000000000000e+00 vs 0.0
for a double
1 / 3 is: 3.333333333333333148296162562474e-01
(1 / 3) x 3 - 1 is: 0.000000000000000000000000000000e+00
for a long double
1 /3 is: 0.000000000000000000000000000000e+00
(1 / 3) x 3 - 1 is: 0.000000000000000000000000000000e+00
could you give me some insight? what i may be doing wrong? what should i
do (for. ex, which options?) should i use to get quadrupole precision?
Thanks a lot for any help!
Best,
Muge
More information about the Gcc-help
mailing list