Bizarre happenings in the world of Python. It seems that you are really not supposed to compare
floating-point and decimal numbers, as this example
shows:
But that’s not the end yet. I have
NLTK 0.9.4 installed, and watch how truth is reversed if I simply
import the NLTK package:
I’m filing bugs about this, but I do find this quite entertaining in a
‘oh-my-God-I-always-believed-Python-was-a-well-behaved-language’ sort of way.
Edit: Edward Loper from NLTK gave
an explanation
why this is the case – it’s not because of NLTK, but because of Python’s internal handling of the
comparison operator on floating-point
numbers:
Apparently, you're only allowed to use comparison operators to compare
Decimal objects to (i) other
Decimal objects; (ii) integers; (iii) longs. Here, you're comparing it to a
float, which isn't allowed, as evidenced by the
following:
Since Decimal's
__cmp__ method returns
NotImplemented, python falls back on using
.3's
__cmp__ method. Unfortunately, when you compare a
float to some random object, the results are pretty much arbitrary, and are not
guaranteed to be consistent. [...]
nltk's not really playing much of a role here (other than
tweaking the system to change that arbitrary result -- my guess would be that the result depends on
the pointer address of the
Decimal class, or of some other object like that).
Crazy stuff.
If you found this post useful, please
support me on Patreon
so that I can write more like it!