首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么decimal.Decimal(0)**decimal.Decimal(0)不返回1

为什么decimal.Decimal(0)**decimal.Decimal(0)不返回1
EN

Stack Overflow用户
提问于 2022-03-06 16:26:04
回答 1查看 116关注 0票数 4

为什么decimal.Decimal(0)**decimal.Decimal(0)不返回1,但返回一个错误?

代码语言:javascript
复制
import decimal
decimal.Decimal(0)**5  # works and returns Decimal('0') as it should
decimal.Decimal(0)**0  # doesn't not work and should return 1
decimal.Decimal(0)**decimal.Decimal(0)  # same
0**0  # works and returns 1

我可以使用if语句来绕过我得到的错误(decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]),但是这样做看起来很脏。

编辑:我在学校一直都知道0^0是1,但是。(注释)它不是。因此,如果我希望它是1,我想我将手动(在我的情况下,这是理想的行为),我没有意识到它的价值有争议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-06 16:40:22

Python的decimal模块遵循IBM通用十进制算法规范IBM通用十进制算法规范将0的幂为0,会引发无效的操作条件并生成NaN。默认情况下,Python会为无效的操作条件引发decimal.InvalidOperation异常,但如果需要,可以更改上下文设置以获取NaN:

代码语言:javascript
复制
In [1]: import decimal

In [2]: decimal.getcontext().traps[decimal.InvalidOperation] = False

In [3]: decimal.Decimal(0)**decimal.Decimal(0)
Out[3]: Decimal('NaN')

至于为什么规范以这种方式定义操作,0^0=1是在离散上下文中最有意义的约定。它对实数没那么有用。IEEE 754选择1.0作为返回值,但IBM做出了不同的选择。这两种选择都是合理的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71372106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档