"Dave Angel" <da...@davea.name> wrote in message
On 02/21/2013 02:33 PM, Schizoid Man wrote:
However, there is an important inaccuracy in math.pow, because it uses
floats to do the work. If you have very large integers, that means some
of them won't be correct. The following are some examples for 2.7.3 on
Linux:
a b math.pow(a,b) a**b
3 34 1.66771816997e+16 16677181699666569
3 35 5.0031545099e+16 50031545098999707
...
5 23 1.19209289551e+16 11920928955078125
The built-in pow, on the other hand, seems to get identical answers for
all these cases. So use pow() instead of math.pow()
I see. I thought using the ** was shorthand for math.pow() and didn't think
that one would be integer operations and the other floats. I'm performing
some large integer arithmetic operations. I would normally do this my
writing my own multiplication class and storing results as strings, but a
friend suggested that I look at Python.
I ran this one example and was quite surprised at the difference, since 9183
is the correct answer.
One other test:
diff = set(map(int, result1)).symmetric_difference(set(result2))
if diff:
print diff
print len(diff)
shows me a diff set of 15656 members. One such member:
13552527156068805425093160010874271392822265625000000000000000000000000000000000000000000000000000000000000000000L
Notice how using floats truncated lots of the digits in the value?
I'm running this test now, but the Mac's fan has kicked in (it's a slightly
older machine) so might it let run through the night.
I appreciate the help.
--
DaveA
--
http://mail.python.org/mailman/listinfo/python-list