This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi,
When i run with the options g++ prog.c -o prog and run the exectuable
it gives me the correct output
but when i do g++ prog.c -o prog -O2 i get the wrong output
The inputs are below
root@edubuntu:/home/junk/prog# g++ bug_gccopt.cpp -O2
root@edubuntu:/home/junk/prog# ./a.out
1
10000000000000333
3135439247023686131
root@edubuntu:/home/junk/prog# g++ bug_gccopt.cpp
root@edubuntu:/home/junk/prog# ./a.out
1
10000000000000333
4511787964595
root@edubuntu:/home/junk/prog#
the file is attached.
i think i know where the bug is because i did it the wrong way and
then later corrected the overflow.
ull is unsigned long long.
for (it = pm.begin (); it != pm.end (); it++)
{
ull a = it->first, b = it->second;
/* These lines are getting optimized and overflow is occuring */
## ull num= (ull) (pow (( double) a, (double) b + 1) - 1);
## ull den=a-1;
## gg=gcd(num,den);
## num/=gg;
## den/=gg;
numprod *=num;
denprod *=den;
gg = gcd (numprod, denprod);
numprod /= gg;
denprod /= gg;
}
i got the wrong result when it were (the optimized code is giving the
answer when the actual code was below
The result i got from the below code is the same that i get from -O2
of the above code which is resulting in overflow )
for (it = pm.begin (); it != pm.end (); it++)
{
ull a = it->first, b = it->second;
nprod*= (ull) (pow (( double) a, (double) b + 1) - 1);
denprod*=a-1;
gg = gcd (numprod, denprod);
numprod /= gg;
denprod /= gg;
}
Am i doing anything wrong above ? is the typecast of ull and double wrong.
junk@edubuntu:~/prog$ g++ -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v
--enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr
--enable-shared --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --enable-nls
--with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2
--enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc
--enable-mpfr --enable-targets=all --enable-checking=release
--build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
junk@edubuntu:~/prog$ g++-4.1 -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v
--enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr
--enable-shared --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --enable-nls
--with-gxx-include-dir=/usr/include/c++/4.1.3 --program-suffix=-4.1
--enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug
--enable-mpfr --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.1.3 20080308 (prerelease) (Ubuntu 4.1.2-21ubuntu1)
junk@edubuntu:~/prog$
Attachment:
bug_gccopt.cpp
Description: Binary data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |