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....