Builtin Float Epsilon? (was: Re: Does python suck or I am just stupid? )
Gerrit Holl
gerrit at nl.linux.org
Sun Feb 23 11:52:43 EST 2003
djw schreef op zaterdag 22 februari om 19:43:06 +0000:
> >
> >Please see
> >http://www.python.org/cgi-bin/faqw.py?req=show&file=faq04.098.htp
> >
> >(Then change the u==x comparison from a strict equality check, as
> >prescribed therein.)
> >
> >-Peter
>
> I've always wondered, given this fact, why is there an equivalence
> operator for floats? (or, maybe the == operator should do the epsilon
> range check for you somehow). It seems to be strange to have an valid
> operator for a type that you should never in practice use. Maybe you
> should be able to write something like:
>
> sys.floatepsilon = 0.000000001 # or maybe some nice default value
>
> ...
> u = 1.0000000000001
> v = 1.0
>
> if u == v: # uses the system float epsilon test instead of "true" test
> ...
>
> Seems like this would keep more people from running into this 'problem'.
I think this is enough:
9 >>> class Myfloat(float):
9 ... epsilon = 0.001
9 ... def __cmp__(self, other):
9 ... if abs(self-other)<self.epsilon: return 0
9 ... else: return float.__cmp__(self, other)
9 ...
10 >>> Myfloat(10) == Myfloat(10)
True
11 >>> Myfloat(10) == Myfloat(11)
False
12 >>> Myfloat(10) == Myfloat(10.01)
False
13 >>> Myfloat(10) == Myfloat(10.0001)
True
yours,
Gerrit.
--
Asperger Syndroom - een persoonlijke benadering:
http://people.nl.linux.org/~gerrit/
Het zijn tijden om je zelf met politiek te bemoeien:
http://www.sp.nl/
More information about the Python-list
mailing list