On Dec 18, 1:09 pm, Mark Dickinson <dicki...@gmail.com> wrote: > On Dec 18, 8:47 pm, Scott David Daniels <scott.dani...@acm.org> wrote: > > > else: # a single result (discriminant is zero) > > return (-b / (2 * a),) > > Maybe make that (-b / (2. * a)) to avoid getting funny results > when a and b are integers. (Or do a from __future__ import > division, or use Python 3.0, or ....) > > And to make the function more bullet-proof, you might want to > do something like (untested): > > from math import copysign > > [rest of example as in Scott's post] > > if discriminant: # two results > root1 = (-b - copysign(discriminant, b))/(2*a) > root2 = c/(a*root1) > return (root1, root2) > > to avoid numerical problems when b*b is much larger > than abs(a*c). Compare with the results of the usual > formula when a = c = 1, b = 10**9, for example. But > that still doesn't help you when the computation > of the discriminant underflows or overflows... > > Isn't floating-point a wonderful thing! :) > > Mark
Thanks for all your help! Its good to know how to do it w/ without numpy. And yes, floating point is the best thing since sliced bread. ^^ -CD -- http://mail.python.org/mailman/listinfo/python-list