Decimals and other numbers

Chris Rebert clp2 at rebertia.com
Thu Jan 8 21:53:36 EST 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

AltStyle によって変換されたページ (->オリジナル) /