hi andrew, this is C code. I don't use the functions ispow2 etc. see the code below .
[EMAIL PROTECTED]:/home/junk/prog/tju# gcc bug_short.c -lm -O2 [EMAIL PROTECTED]:/home/junk/prog/tju# ./a.out 2383,1 31727,1 132265613,1 3145439247023686464 [EMAIL PROTECTED]:/home/junk/prog/tju# gcc bug_short.c -lm [EMAIL PROTECTED]:/home/junk/prog/tju# ./a.out 2383,1 31727,1 132265613,1 10004511787964928 [EMAIL PROTECTED]:/home/junk/prog/tju# cat bug_short.c #include<stdio.h> #include<math.h> typedef unsigned long long ull; ull gcd (ull a, ull b) { if (b == 0) return a; return gcd (b, a % b); } int main () { ull numprod, denprod, gg; ull arr[] = { 2383, 31727, 132265613 }; ull acnt[] = {1,1,1}; int cntm = sizeof (arr) / sizeof (arr[0]), i; numprod = denprod = 1; for (i = 0; i <cntm; i++) { ull a = arr[i], b = acnt[i]; printf ("%llu,%llu\n", a, b); 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; } gg = gcd (numprod, denprod); numprod /= gg; denprod /= gg; printf ("%llu\n", numprod); return 0; } [EMAIL PROTECTED]:/home/junk/prog/tju# [EMAIL PROTECTED]:~/prog/tju$ gcc bug_short.c -Wall -Wstrict-overflow=2 -lm [EMAIL PROTECTED]:~/prog/tju$ gcc bug_short.c -Wall -Wstrict-overflow=2 -lm -O2 [EMAIL PROTECTED]:~/prog/tju$ gcc -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) [EMAIL PROTECTED]:~/prog/tju$ Do you want the asm files or other files ? tell me how to give to you. you want me to do gcc -S and send you the output ? On Sat, Aug 23, 2008 at 3:48 AM, Andrew Pinski <[EMAIL PROTECTED]> wrote: > On Fri, Aug 22, 2008 at 3:14 PM, Andrew Pinski <[EMAIL PROTECTED]> wrote: >> On Fri, Aug 22, 2008 at 2:47 PM, Niklaus <[EMAIL PROTECTED]> wrote: >>> 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 >>> > > Note by the way I think your ispow2 is incorrect. It is doing a "a == > 1 & a != 0" and not ((a-1)&a) == 0. We do warn about this too: > t.c:189: warning: suggest parentheses around comparison in operand of & > > > -- Pinski >