Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.88k stars 531 forks source link

Subtraction of numbers #8871

Closed p5pRT closed 16 years ago

p5pRT commented 17 years ago

Migrated from rt.perl.org#42463 (status was 'rejected')

Searchable as RT42463$

p5pRT commented 17 years ago

From sayd@bug.botik.ru

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

p5pRT commented 17 years ago

From @rgarcia

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.

p5pRT commented 17 years ago

The RT System itself - Status changed from 'new' to 'open'

p5pRT commented 17 years ago

From shouldbedomo@mac.com

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

p5pRT commented 16 years ago

p5p@spam.wizbit.be - Status changed from 'open' to 'rejected'