On 7/27/2013 1:48 PM, Marco wrote:
In Python 3, when we hava a division and both the result and at least
one operand are too large to convert to float, we get an exception:

     >>> 2**1028 / 2**-2

int/float gets converted to float/float and the int to float conversion is not possible. The result is irrelevant since it never gets calculated.

     Traceback (most recent call last):
       File "<input>", line 1, in <module>
     OverflowError: long int too large to convert to float

When the result is inside the limits, we get the right value:

     >>> 2 ** 1025 / 2**10
     3.511119404027961e+305

This must be doing integer division and then converting the result to float, which it can.

Why the behavior is different in the case of the multiplication?

     >>> 2 ** 1025 * 2**-10

Mathematically this is the same thing, but computationally, it is not and you cannot expect to get the same answer. Like the first example, 2**-10 is a float, so 2**1025 must be converted to float to do float multiplication. But that is not possible.

     Traceback (most recent call last):
       File "<input>", line 1, in <module>
     OverflowError: long int too large to convert to float

I think the multiplication should have the same behavior than the
division:

* `inf` or `-inf` when the operands are inside the limits,
   but the result is not
* `OverflowError`  when the result, and at least one operand,
   are out of range.

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to