Project

General

Profile

Actions

Bug #3365

closed

floats revisited (see bug 1841)

Added by blue_anna (Roberto Tomás Collins McCarthy) over 14 years ago. Updated over 13 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.1p378 (2010-01-10 revision 26273) [powerpc-linux]
Backport:
[ruby-core:30513]

Description

=begin
someone posted that the float errors were just fine by them, referring to IEEE 754. I suggest visiting that standard yourself before closing the bug. If you look at the bug as reported, there is a rounding error on the 16th digit. IEEE 754 provides precision through 16 digits on doubles (binary64), the first rounding (eg, error) can only occur at the 17th digit.

I can confirm on my system that C does not produce the same results as ruby in this regard:
bash$ gcc -o fp fp.c && ./fp && ruby -e 'puts "\nfp.c\n······\n"' && cat fp.c && ruby -e 'puts "\nruby #{RUBY_VERSION}: #{100.0 - 91.6}"'
System double representaiton: 8.400000e+00
8.40000000000000568434188608080148696899414062500000e+00
8.40000000000000568434188608080148696899414062500000e+00
sizeof doubles 8
sizeof long doubles 16

fp.c
······
#include <stdio.h>
#include <math.h>

int main(){
double cien = 100.0;
double frac = 91.6;
long double ciento = 100.0;
long double fract = 91.6;
printf("System double representaiton: %e\n", cien - frac);
printf("%.50e\n", cien - frac);
printf("%.50Le\n", ciento - fract);

printf("sizeof doubles %d\n", sizeof(cien));
printf("sizeof long doubles %d\n", sizeof(ciento));
return 0;
}
ruby 1.9.1: 8.40000000000001

independently of whether ruby would or would not conform to IEEE754 the fact that C does not see doubles the same as ruby can be seen as a bug. as can the fact that right now elementary math any 2nd grader could expect to use with ruby can fail (100.0 - 91.6 == 8.4).
=end


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #1841: Float internal problem in ruby1.9.2dev (2009-07-18)Rejected07/30/2009Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0