On 2011-02-22, christian schulze <xcr...@googlemail.com> wrote: > Hey guys, > > I just found out, how much Python fails on simple math.
Python doesn't do math. It does floating point operations. They're different. Seriously. On all of the platforms I know of, it's IEEE 754 (base-2) floating point. > I checked a simple equation for a friend. > > [code] >>>> from math import e as e >>>> from math import sqrt as sqrt >>>> 2*e*sqrt(3) - 2*e == 2*e*(sqrt(3) - 1) > False > [/code] > > So WTF? Python doesn't do equations. Python does floating point operations. [And it does them in _base_2_ -- which is important, because it makes things even more difficult.] > The equation is definitive equivalent. (See http://mathbin.net/59158) But, the two floating point expressions you provided are not equivalent. Remember, you're not doing math with Python. You're doing binary floating point operations. > #1: >>>> 2.0 * e * sqrt(3.0) - 2.0 * e > 3.9798408154464964 > > #2: >>>> 2.0 * e * (sqrt(3.0) -1.0) > 3.979840815446496 > > I was wondering what exactly is failing here. The math module? > Python, or the IEEE specifications? I'm afraid it's the user that's failing. Unfortunately, in many situations using floating point is neither intuitive nor easy to get right. http://docs.python.org/tutorial/floatingpoint.html http://en.wikipedia.org/wiki/Floating_point -- Grant Edwards grant.b.edwards Yow! I like your SNOOPY at POSTER!! gmail.com -- http://mail.python.org/mailman/listinfo/python-list