Python Lies

This is probably a documented issue, but I think it deserves another mention. Python lies, its the truth. Well, as much as an interpreter can lie.

Say we want to do some math in Python. Say we want to raise large numbers to large numbers. Say those numbers are 324 and 324. Then we would do something like:

<<< 324**324

and see all the pretty numbers spew out from the interpreter. How do we know if this is right or wrong though? Say we use long doubles in C++ to determine the results of this same operation. Then we would do something like:

long double k = 324;
for (int i=0; i<324; ++i) {
    k *= k
}
std::cout << "324^324 = " << k << "n";

But alas, the output is “inf”, so we check the largest long double our compiler and machine can represent and find that it is roughly equal to 1.2e+4932. We then check in python if this number is greater than 324^324 by doing something like:

>>>> (12**4932) > (324**324)
True

However, this contradicts the fact that C++ could not represent 324^324, so Python must be lying. Indeed we check the largest power of 324 we can represent in C++ long doubles, and it turns out to be 11. Thus Python lies.

What does this mean. Don’t rely on Python for numeric accuracy without checking its results.

Update: This post is probably wrong, but I don’t like deleting things. So refer to Tyler’s comment below.

This entry was posted on Sunday, February 17th, 2008 at 7:13 pm and is filed under Front Page, Python. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 Responses to “Python Lies”

  1. Tyler Says:

    This should be taken down as it is not accurate.

    C++ can not represent this number because it is too large.

    During arithmetic operations, Python allocates as much space as it can which surpasses the traditional register size.

  2. Abby Says:

    Well said.

Leave a Reply