Bug #5497

Math.log10(10_000) error on HP-UX/PA

Added by twwlogin (The Written Word Inc) 7 months ago. Updated 2 months ago.

[ruby-core:40489]
Status:Assigned Start date:10/28/2011
Priority:Normal Due date:
Assignee:mrkn (Kenta Murata) % Done:

0%

Category:core
Target version:1.9.2
ruby -v:UNKNOWN

Description

I've built 1.9.2 from svn revision at 33531 on HP-UX/PA and HP-UX/IA. I'm getting two different results for Math.log10(10_000) depending on IA64 and PA-RISC: (ia64) p Math.log10(10_000) 4 (pa-risc) p Math.log10(10_000) 3.9999999999999996 Any idea where in the code I can look to try and fix this?

History

Updated by naruse (Yui NARUSE) 7 months ago

The Written Word Inc wrote: > (ia64) > p Math.log10(10_000) > 4 Show the result of `p 4.0`. > (pa-risc) > p Math.log10(10_000) > 3.9999999999999996 Build and run following C code: % cat f.c #include <math.h> #include <stdio.h> int main(void) { printf("%a\n", log10(10000)); return 0; } % gcc -lm f.c && ./a.out 0x1p+2 (or something)

Updated by twwlogin (The Written Word Inc) 7 months ago

Yui NARUSE wrote: > The Written Word Inc wrote: > > (ia64) > > p Math.log10(10_000) > > 4 > > Show the result of `p 4.0`. (ia64) p 4.0 4.0 (pa-risc) p 4.0 4.0 > > (pa-risc) > > p Math.log10(10_000) > > 3.9999999999999996 > > Build and run following C code: > > % cat f.c > #include <math.h> > #include <stdio.h> > > int main(void) { > printf("%a\n", log10(10000)); > return 0; > } > % gcc -lm f.c && ./a.out > 0x1p+2 (or something) $ cat t.c #include <math.h> #include <stdio.h> int main(void) { printf("%f\n", log10(10000)); printf("%a\n", log10(10000)); return 0; } (ia64) $ cc +O1 +Ofltacc +Olit=all +Oentrysched +Odataprefetch -lm t.c $ ./a.out 4.000000 0x1.0000000000000p+2 %a is only supported on HP-UX/IA systems, not HP-UX/PA. We're using the HP-UX C compiler to build Ruby as well.

Updated by naruse (Yui NARUSE) 7 months ago

The Written Word Inc wrote: > Yui NARUSE wrote: > > The Written Word Inc wrote: > > > (ia64) > > > p Math.log10(10_000) > > > 4 > > > > Show the result of `p 4.0`. > > (ia64) > p 4.0 > 4.0 Hmm, it is strange but I don't have any idea. > > > (pa-risc) > > > p Math.log10(10_000) > > > 3.9999999999999996 > > > > Build and run following C code: > > > > % cat f.c > > #include <math.h> > > #include <stdio.h> > > > > int main(void) { > > printf("%a\n", log10(10000)); > > return 0; > > } > > % gcc -lm f.c && ./a.out > > 0x1p+2 (or something) > > $ cat t.c > #include <math.h> > #include <stdio.h> > > int main(void) { > printf("%f\n", log10(10000)); > printf("%a\n", log10(10000)); > return 0; > } > > %a is only supported on HP-UX/IA systems, not HP-UX/PA. We're using the HP-UX C compiler to build Ruby as well. OK, can you show a result without %a? As Bílka says, this is because it is floating point, but it can be fixed by some options to specify libm as IEEE 754 mode.

Updated by twwlogin (The Written Word Inc) 6 months ago

Yui NARUSE wrote: > The Written Word Inc wrote: > > $ cat t.c > > #include <math.h> > > #include <stdio.h> > > > > int main(void) { > > printf("%f\n", log10(10000)); > > printf("%a\n", log10(10000)); > > return 0; > > } > > > > %a is only supported on HP-UX/IA systems, not HP-UX/PA. We're using the HP-UX C compiler to build Ruby as well. > > OK, can you show a result without %a? > As Bílka says, this is because it is floating point, but it can be fixed by some options to specify libm as IEEE 754 mode. $ cat t.c #include <math.h> #include <stdio.h> int main(void) { printf("%f\n", log10(10000)); return 0; } $ cc t.c -lm $ ./a.out 4.000000

Updated by ko1 (Koichi Sasada) 2 months ago

  • Assignee set to mrkn (Kenta Murata)

Updated by shyouhei (Shyouhei Urabe) 2 months ago

  • Status changed from Open to Assigned

Also available in: Atom PDF