puzzled about floats
Marc 'BlackJack' Rintsch
bj_666 at gmx.net
Mon Sep 24 15:02:51 EDT 2007
On Mon, 24 Sep 2007 14:13:18 -0400, Neal Becker wrote:
> from math import modf
>
> class nco (object):
> def __init__ (self, delta):
> self.delta = delta
> self.phase = 0.0
> def __call__ (self):
> self.phase += self.delta
> f,i = modf (self.phase)
> print modf (self.phase)
> if (self.phase > 1.0):
> self.phase -= 1.0
> return self.phase
>
> n = nco (0.1)
> for x in xrange (100):
> print '%.12f' % n()
>
> prints out
> [...]
> (0.99999999999999978, 0.0) <<< from modf
> 1.000000000000 << from n()
>
> I'm baffled as to why 'print modf (self.phase)' prints out the first value,
> but the result printed in the 2nd case is different. Without any precision
> spec on the first print, an approximate float value was printed, but even
> with %.12f, the second gives exactly 1.000....
Tuples are printed with calling `repr()` on the objects:
In [144]: str(0.1)
Out[144]: '0.1'
In [145]: repr(0.1)
Out[145]: '0.10000000000000001'
In [146]: '%.12f' % 0.1
Out[146]: '0.100000000000'
In [147]: '%.50f' % 0.1
Out[147]: '0.10000000000000000555111512312578270211815834045410'
Ciao,
Marc 'BlackJack' Rintsch
More information about the Python-list
mailing list