gpt4 book ai didi

Python Decimal 不接受 getcontext() 精度修改

转载 作者:行者123 更新时间:2023-12-04 12:59:47 35 4
gpt4 key购买 nike

只是尝试基本的 python Decimal module它似乎不起作用(在 jupyter notebook 中):

from decimal import *
getcontext().prec = 1

getcontext()

返回 Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
Decimal(0.111111)

返回 Decimal('0.11111100000000000143085543413690174929797649383544921875')
知道发生了什么吗?

最佳答案

它看起来像一个错误。
更新:这应该在 2021 年 4 月发布的 ipython 6.0+ 中修复。这是修复的具体 PR:
https://github.com/ipython/ipykernel/pull/632
如果您正在使用 pip 或 jupyter --version 检查已安装的版本,您要查找的特定库是 ipykernel >= 6.0
*编辑:行为似乎因版本而异。最可靠的解决方法应该是在需要应用的每个单元格中定义小数精度,或者将精度定义移动到外部模块。
我已经完成了一些故障排除,这是我发现的*:

  • 如果您刚刚启动 Jupyter,getcontext().prec = x行为正常。
  • 如果您使用 Run > "Run All Cells",行为也是正常的。
  • 如果您在 Jupyter UI 中重新启动内核,则在手动单元执行之间精度将重置为 28。

  • 我已经向 Jupyter 提交了一个错误 - https://github.com/jupyter/notebook/issues/5260
    作为一种简单但有点丑陋的解决方法,定义 getcontext().prec = 1在您希望应用精度的每个单元格中,似乎强制 Jupyter 使用它。
    或者 - 这很奇怪 - 在任何单元格中运行此命令似乎可以在运行后修复整个笔记本的精度。把它放在你的 nb 的顶部,你应该很好: !jupyter notebook --version最后,导入的模块应该正常运行。如果你走这条路,我可能会建议使用类似“nbdev”包的东西来简化从笔记本创建模块的过程——它比从笔记本复制/粘贴更容易保持有条理。

    关于Python Decimal 不接受 getcontext() 精度修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59851290/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com