code not true?
John W. Baxter
jwbnews at scandaroon.com
Sun Apr 23 07:41:49 CEST 2000
In article <Pine.GSO.4.10.10004230758200.15546-100000 at sundial>, Moshe
Zadka <mzadka at geocities.com> wrote:
> On Sat, 22 Apr 2000, John W. Baxter wrote:
>
> > > > >>> print 7.0 == 7
> > > > 1
> > > > >>> print (.07 * 100) == 7
> > > > 0
> > >
> > > Because computers represent floats with too little bits.
> > > Never ever compare two floats for equality!
> > >
> > Not quite. No number of bits is sufficient to represent .07 exactly in
> > the typical (and IEEE standard) representation.
>
> Yes, but enough bits could make sure that 0.07*100 is indistinguishable
> from 7.0
We have that many bits now...we just have to define "indistinguishable"
properly. For example
Python 1.5.2 (#2, Dec 23 1999, 13:16:10) [GCC egcs-2.91.66 19990314
(egcs-1.1.2 on bsdos4
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> a = .07 * 100
>>> b = 7
>>> epsilon = 1e-15
>>> abs(a-b) < epsilon
1
>>> a == b
0
>>>
The above is not how == is defined. It is one way (with a suitable
epsilon...this one may not be suitable for one's particular problem) to
test two numbers for "close enough to be indistinguishable, so we'll
call them equal". (And don't forget the abs()...forgetting that can
ruin an evening.)
--John (who also fought with plus zero and minus zero, both in
integers and floating point)
--
John W. Baxter Port Ludlow, WA USA jwbnews at scandaroon.com
More information about the Python-list
mailing list