[Tutor] Why doesn't this work??

Carl Kreider carlk@argus.syscon-intl.com
Mon, 31 Jul 2000 17:33:52 -0500


Could some kind soul help an old C programmer and explain
what is wrong with this code?

---------8<-----------
#!/bin/env python

T = 0
dt = 0.1

def time_to_print(interval):
	num = T / dt
	den = interval / dt
	ttp = num % den
	print "ttp: T=%f num=%f den=%f ttp=%f" % (T, num, den, ttp)
	return abs(ttp) < dt


while (T < 6.0):
	if time_to_print(1):
		print "%f" % T
	T = T + dt
---------8<-----------

The output I get using:

Python 1.5.2 (#1, Jul 17 1999, 22:10:16)  [GCC egcs-2.91.66 19990314/Linux (egcs- on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>  

is:

---------8<-----------
carlk$ python ttp.py
ttp: T=0.000000 num=0.000000 den=10.000000 ttp=0.000000
0.000000
ttp: T=0.100000 num=1.000000 den=10.000000 ttp=1.000000
  (snip)
ttp: T=0.900000 num=9.000000 den=10.000000 ttp=9.000000
ttp: T=1.000000 num=10.000000 den=10.000000 ttp=10.000000
ttp: T=1.100000 num=11.000000 den=10.000000 ttp=1.000000
  (snip)
ttp: T=2.000000 num=20.000000 den=10.000000 ttp=0.000000
2.000000
ttp: T=2.100000 num=21.000000 den=10.000000 ttp=1.000000
  (snip)
ttp: T=3.000000 num=30.000000 den=10.000000 ttp=0.000000
3.000000
ttp: T=3.100000 num=31.000000 den=10.000000 ttp=1.000000
  (snip)
ttp: T=4.000000 num=40.000000 den=10.000000 ttp=0.000000
4.000000
ttp: T=4.100000 num=41.000000 den=10.000000 ttp=1.000000
  (snip)
ttp: T=4.900000 num=49.000000 den=10.000000 ttp=9.000000
ttp: T=5.000000 num=50.000000 den=10.000000 ttp=10.000000
ttp: T=5.100000 num=51.000000 den=10.000000 ttp=1.000000
  (snip)
ttp: T=5.900000 num=59.000000 den=10.000000 ttp=9.000000
ttp: T=6.000000 num=60.000000 den=10.000000 ttp=10.000000
---------8<-----------

I agree that 0, 20, 30, and 40 mod 10 yield 0, but since
when does 10, 50, or 60 mod 10 yield 10?  Do I misremember
how mod works?

-- 
Carl Kreider
 aka
  [carlk|root]@syscon-intl.com    (219) 232-3900 Ext 207
   ckreider@gte.net  ckreider@acm.org ckreider@alumni.indiana.edu

 Do, or do not.  There is no try.
                       - Yoda, The Empire Strikes Back