On Fri, 22 Feb 2013 08:23:27 +1100, Chris Angelico <ros...@gmail.com> wrote: > On Fri, Feb 22, 2013 at 7:49 AM, Dave Angel <da...@davea.name> wrote: >> However, if I do: >> >> print 3**60, "\n", int(math.pow(3,60)), "\n", pow(3,60) >> >> >> I get: >> >> 42391158275216203514294433201 >> 42391158275216203520420085760 >> 42391158275216203514294433201 >> >> >> and the middle one is the one that's wrong. > > In theory, a float should hold the nearest representable value to the > exact result. Considering that only one operation is being performed, > there should be no accumulation of error. The integer results show a > small number (618) of collisions, eg 2**16 and 4**8; why should some > of those NOT collide when done with floating point? My initial thought > was "Oh, this is comparing floats for equality", but after one single > operation, that should be not a problem.
Does this help explain it? >>> print hex(int(math.pow(3,60))); print hex(3**60) 0x88f924eeceeda80000000000L 0x88f924eeceeda7fe92e1f5b1L -- To email me, substitute nowhere->spamcop, invalid->net. -- http://mail.python.org/mailman/listinfo/python-list