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 -- http://mail.python.org/mailman/listinfo/python-list