Riko Wichmann wrote: > def riskfunc(med, low, high): > if med != 0.0: > u = random() > try: > if u <= (med-low)/(high-low): > r = low+sqrt(u*(high-low)*(med-low)) > else: > r = high - sqrt((1.0-u)*(high-low)*(high-med)) > > except ZeroDivisionError: # case high = low > r = med > else: > r = 0.0 > > return r
Since math.sqrt() is in C, the overhead of the sqrt() call is probably minor, but the lookup is having to go to the global namespace which is a tiny step beyond looking just at the locals. Using a default argument to get a local could make a small difference. That is do this instead: def riskfunc(med, low, high, sqrt=math.sqrt): Same thing with calling random(), which is doing a global lookup first to find the function. By the way, you'll get better timing information by learning to use the timeit module. Among other things, depending on your platform and how long the entire loop takes to run, using time.time() could be given you pretty coarse results. You might also try precalculating high-low and storing it in a temporary variable to avoid the duplicate calculations. -Peter -- http://mail.python.org/mailman/listinfo/python-list