Project

General

Profile

Bug #5497

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

Added by twwlogin (The Written Word Inc) almost 9 years ago. Updated about 1 year ago.

Status:
Closed
Priority:
Normal
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) almost 9 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) almost 9 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) over 8 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 <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) over 8 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 8 years ago

  • Assignee set to mrkn (Kenta Murata)
#6

Updated by shyouhei (Shyouhei Urabe) over 8 years ago

  • Status changed from Open to Assigned

Updated by mrkn (Kenta Murata) about 8 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 naruse (Yui NARUSE) over 7 years ago

  • Target version changed from 1.9.2 to 2.6

Updated by naruse (Yui NARUSE) about 3 years ago

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

Updated by nobu (Nobuyoshi Nakada) about 3 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;
}
#11

Updated by naruse (Yui NARUSE) over 2 years ago

  • Target version deleted (2.6)
#12

Updated by jeremyevans0 (Jeremy Evans) about 1 year ago

  • Status changed from Feedback to Closed

Also available in: Atom PDF