Decimals and other numbers

Chris Rebert clp2 at rebertia.com
Fri Jan 9 03:53:36 CET 2015


On Thu, Jan 8, 2015 at 6:33 PM, Devin Jeanpierre <jeanpierreda at gmail.com> wrote:
> I noticed some very PHP-ish behavior today:
>
>>>> import decimal
>>>> x = 0
>>>> y = float(x)
>>>> z = decimal.Decimal(x)
>>>> x == y == z == x
> True
>>>> x ** x
> 1
>>>> y**y
> 1.0
>>>> z**z
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "/usr/lib/python2.7/decimal.py", line 2216, in __pow__
>     return context._raise_error(InvalidOperation, '0 ** 0')
>   File "/usr/lib/python2.7/decimal.py", line 3872, in _raise_error
>     raise error(explanation)
> decimal.InvalidOperation: 0 ** 0
>
> I'd file a bug report but I'm anticipating some rational (heh)
> explanation. Any ideas?

The `decimal` std lib module implements the General Decimal Arithmetic
Specification (http://speleotrove.com/decimal/decarith.html ).
In the "Exceptional conditions" section
(http://speleotrove.com/decimal/daexcep.html ), it specifies the
following:
    Invalid operation
        This occurs and signals invalid-operation if:
        [...]
        * both operands of the power operation are zero

No idea why it chose to differ from IEEE-754.

Cheers,
Chris



More information about the Python-list mailing list