Project

General

Profile

Actions

Bug #5497

closed

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

Added by twwlogin (The Written Word Inc) about 13 years ago. Updated over 5 years ago.

Status:
Closed
Target version:
-
[ruby-core:40489]

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?

Updated by naruse (Yui NARUSE) about 13 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 <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) about 13 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 <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) about 13 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 <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) about 13 years 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) over 12 years ago

  • Assignee set to mrkn (Kenta Murata)
Actions #6

Updated by shyouhei (Shyouhei Urabe) over 12 years ago

  • Status changed from Open to Assigned

Updated by mrkn (Kenta Murata) over 12 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.

Actions #8

Updated by naruse (Yui NARUSE) over 11 years ago

  • Target version changed from 1.9.2 to 2.6

Updated by naruse (Yui NARUSE) over 7 years ago

  • Assignee changed from mrkn (Kenta Murata) to takano32 (Mitsuhiro TAKANO)

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

Please try more precision.
The default precision doesn't seem enough.

#include <math.h>
#include <stdio.h>

int main(void) {
  printf("%.19f\n", log10(10000));
  return 0;
}
Actions #11

Updated by naruse (Yui NARUSE) almost 7 years ago

  • Target version deleted (2.6)
Actions #12

Updated by jeremyevans0 (Jeremy Evans) over 5 years ago

  • Status changed from Feedback to Closed
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0