Closed p5pRT closed 16 years ago
This is a bug report for perl from sayd@bug.botik.ru\, generated with the help of perlbug 1.35 running under perl v5.8.8.
I have following:
# perl -le 'print 12.69-12.16' 0.529999999999999
# perl -le 'print 19.69-19.16' 0.530000000000001
It has forced me to use: $var = 19.69 - 19.16; $var = printf ("%.2f"\, $var);
Flags: category=core severity=medium
Site configuration information for perl v5.8.8:
Configured by Debian Project at Wed Dec 6 23:17:41 UTC 2006.
Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux\, osvers=2.6.18.3\, archname=i486-linux-gnu-thread-multi uname='linux saens 2.6.18.3 #1 smp sat nov 25 13:39:52 est 2006 i686 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des' hint=recommended\, useposix=true\, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n\, bincompat5005=undef Compiler: cc='cc'\, ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'\, optimize='-O2'\, cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include' ccversion=''\, gccversion='4.1.2 20061115 (prerelease) (Debian 4.1.1-20)'\, gccosandvers='' intsize=4\, longsize=4\, ptrsize=4\, doublesize=8\, byteorder=1234 d_longlong=define\, longlongsize=8\, d_longdbl=define\, longdblsize=12 ivtype='long'\, ivsize=4\, nvtype='double'\, nvsize=8\, Off_t='off_t'\, lseeksize=8 alignbytes=4\, prototype=define Linker and Libraries: ld='cc'\, ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=/lib/libc-2.3.6.so\, so=so\, useshrplib=true\, libperl=libperl.so.5.8.8 gnulibc_version='2.3.6' Dynamic Linking: dlsrc=dl_dlopen.xs\, dlext=so\, d_dlsymun=undef\, ccdlflags='-Wl\,-E' cccdlflags='-fPIC'\, lddlflags='-shared -L/usr/local/lib'
Locally applied patches:
@INC for perl v5.8.8: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .
Environment for perl v5.8.8: HOME=/home/sayd LANG=C LANGUAGE (unset) LC_CTYPE=ru_RU.KOI8-R LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/src/l2j/jre1.5.0_06/:/usr/local/bin:/usr/games:/usr/X11R6/bin:/usr/bin:/bin:/usr/sbin:/usr/lib/games/quake2:/usr/lib/locate/:/home/sayd/.rshell:/home/sayd/vicq PERL_BADLANG (unset) SHELL=/usr/bin/tcsh
On 11/04/07\, via RT sayd @ bug. botik. ru \perlbug\-followup@​perl\.org wrote:
I have following:
# perl -le 'print 12.69-12.16' 0.529999999999999
# perl -le 'print 19.69-19.16' 0.530000000000001
That's not a bug. Those floating point numbers can't be represented exactly internally by the CPU. Thus rounding errors occur. (Using 0.3333333333 instead of 1/3 would probably surprise you less\, but it's the same bug.)
It has forced me to use: $var = 19.69 - 19.16; $var = printf ("%.2f"\, $var);
That's the correct way to do it.
The RT System itself - Status changed from 'new' to 'open'
On 2007–04–12\, at 10:00\, Rafael Garcia-Suarez wrote:
That's not a bug. Those floating point numbers can't be represented exactly internally by the CPU. Thus rounding errors occur. (Using 0.3333333333 instead of 1/3 would probably surprise you less\, but it's the same bug.)
It has forced me to use: $var = 19.69 - 19.16; $var = printf ("%.2f"\, $var);
That's the correct way to do it.
For some more on this\, see perldoc -q number
And for more than you ever wanted to know\, \<http://en.wikipedia.org/ wiki/Floating_point#Accuracy_problems>. -- Dominic Dunlop
p5p@spam.wizbit.be - Status changed from 'open' to 'rejected'
Migrated from rt.perl.org#42463 (status was 'rejected')
Searchable as RT42463$