bob@tinman.cis.ohio-state.edu (Bob Sutterfield) (06/27/89)
Based on the following thumbnail tests, I'm recommending that our
Sun-3 users invoke gcc with "-O -ffloat-store" and our Pyramid users
avoid "-O".
/*
This is a test for floating point arithmetic
by Douglas Yarrington (yarringt@cis.ohio-state.edu)
*/
#include <stdio.h>
main()
{
double test;
float test1;
test = 3.1415;
printf("%4.3e\n",3.1415 );
printf("%f\n", test );
test1 = 3.1415;
printf("%f\n", test1 );
}
compiler machine switches results
-------- ------- -------- -------
Sun CC Sun3/OS3.5.1 yes
-O yes
-g yes
GNU CC 1.35 Sun3/OS3.5.1 no
(a) -g no
(b) -O const & double OK, float bad
-O -g const & double OK, float bad
-ffloat-store no
-ff-s -g no
(c) -ff-s -O yes
-ff-s -O -g yes
GNU CC 1.26 NeXT/Mach0.9 yes
-O yes
-g yes
-O -g yes
-ffloat-store yes
-ff-s -g yes
-ff-s -O yes
-ff-s -O -g yes
Sun CC Sun4/OS4.0.1 yes
-O yes
-g yes
GNU CC 1.35 Sun4/OS4.0.1 yes
-O yes
-g yes
-O -g yes
-ffloat-store yes
-ff-s -O yes
-ff-s -O -g yes
-ff-s -g yes
Pyramid CC Pyramid/OSx4.0 yes
-O yes
-OG yes
-g yes
GNU CC 1.35 Pyramid/OSx4.0 yes
-g yes
(d) -O double OK, const & float diff
-O -g double OK, const & float diff
-ffloat-store yes
-ff-s -g yes
-ff-s -O double OK, const & float diff
-ff-s -O -g double OK, const & float diff
sample output:
(a) (sun3, gcc -g)
11:02am> ./test-gccg
0.000e+00
0.000000
0.000000
11:02am>
(b) (sun3, gcc -O)
11:03am> ./test-gccO
3.142e+00
3.141500
0.000000
11:03am>
(c) (sun3, gcc -O -gfloat-store) (this is the correct output)
11:03am> ./test-gccOf
3.142e+00
3.141500
3.141500
11:03am>
(d) (pyramid, gcc -O)
11:04am> ./test-gccPO
3.141e+00
3.141500
2.142687
11:04am>