Loss of precision / data corruption with Tkinter.DoubleVar ?!
David Lees
abcdebl2nonspammy at verizon.net
Fri Apr 11 16:25:28 EDT 2003
Lonnie Princehouse wrote:
> Greetings,
>
> I stumbled across this curiosity yesterday:
>
>
>>>>x = 0.33333333333333098
>>>>x
>
> 0.33333333333333098
>
>>>>import Tkinter
>>>>y = Tkinter.DoubleVar(Tkinter.Tk())
>>>>y.set(x)
>>>>y.get()
>
> 0.33333333333300003
>
> What the....?
>
> Sure, it's only on the order of 10e-13 delta,
> but why is there any difference at all??
>
>
> I hit this because at some point I was trying to do:
>
> y.set(x)
> .
> .
> .
> if y.get() == x:
> ...
>
> and of course it wasn't working properly!
>
> I have tried this on Python 2.2 for Win32 and Linux/x86
>
>
>
>
> -Lonnie Princehouse
See: http://www.python.org/doc/current/tut/node14.html
I do not know what goes on inside Tkinter when you do a 'set', but it is
bad practice to do the kind of exact comparison in your 'if' statement
on floating point numbers.
David Lees
More information about the Python-list
mailing list