Bug #5497
Math.log10(10_000) error on HP-UX/PA
| Status: | Assigned | Start date: | 10/28/2011 | |
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | % 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