On Fri, Feb 22, 2013 at 7:49 AM, Dave Angel <(E-Mail Removed)> 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 (61

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.

> You can tell by casting out 9's. The middle one gets 1

> instead of zero, showing that it's NOT divisible by 3.
Which I thought so cool and magical and awesome, until I started

exploring other bases and found that you could cast out F's in hex and

7's in octal... and you can cast out 1's in binary to find out if it's

a multiple of 1, too.

ChrisA