Bug #5497

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

Added by The Written Word Inc over 2 years ago. Updated about 1 year ago.

[ruby-core:40489]
Status:Feedback
Priority:Normal
Assignee:Kenta Murata
Category:core
Target version:next minor
ruby -v:UNKNOWN Backport:

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(10000) 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

#1 Updated by Yui NARUSE over 2 years 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
#include

int main(void) {
printf("%a\n", log10(10000));
return 0;
}
% gcc -lm f.c && ./a.out
0x1p+2 (or something)

#2 Updated by The Written Word Inc over 2 years 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
#include

int main(void) {
printf("%a\n", log10(10000));
return 0;
}
% gcc -lm f.c && ./a.out
0x1p+2 (or something)

$ cat t.c
#include
#include

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.

#3 Updated by Yui NARUSE over 2 years 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
#include

int main(void) {
printf("%a\n", log10(10000));
return 0;
}
% gcc -lm f.c && ./a.out
0x1p+2 (or something)

$ cat t.c
#include
#include

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.

#4 Updated by The Written Word Inc over 2 years ago

Yui NARUSE wrote:

The Written Word Inc wrote:

$ cat t.c
#include
#include

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
#include

int main(void) {
printf("%f\n", log10(10000));
return 0;
}

$ cc t.c -lm
$ ./a.out
4.000000

#5 Updated by Koichi Sasada about 2 years ago

  • Assignee set to Kenta Murata

#6 Updated by Shyouhei Urabe about 2 years ago

  • Status changed from Open to Assigned

#7 Updated by Kenta Murata almost 2 years ago

  • Status changed from Assigned to Feedback

I don't have any environments to examine this issue.
Please give me a patch to fix this.

#8 Updated by Yui NARUSE about 1 year ago

  • Target version changed from 1.9.2 to next minor

Also available in: Atom PDF