gpt4 book ai didi

python - 为什么 Python 的 Decimal 函数默认为 54 位?

转载 作者:太空狗 更新时间:2023-10-29 22:16:30 24 4
gpt4 key购买 nike

输入后

from decimal import *
getcontext().prec = 6
Decimal (1) / Decimal (7)

我得到了值(value)

Decimal('0.142857')  

但是如果我输入 Decimal (1.0/7) 我会得到

Decimal('0.142857142857142849212692681248881854116916656494140625')

最佳答案

1.0/7 计算一个二进制 float 到 17 位精度。这发生在 Decimal 构造函数看到它之前:

>>> d = 1.0 / 7
>>> type(d)
<type 'float'>
>>> d.as_integer_ratio()
(2573485501354569, 18014398509481984)

二进制分数 2573485501354569/18014398509481984 与使用 53 位精度的二进制 float 一样接近。它不完全是 1/7,但非常接近。

然后 Decimal 构造函数将二进制小数转换为必要的位数以获得精确的十进制等价物。你看到的结果就是你在评估 2573485501354569/18014398509481984 时得到的结果:

>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 100
>>> Decimal(2573485501354569) / Decimal(18014398509481984)
Decimal('0.142857142857142849212692681248881854116916656494140625')

学习点 1:二进制 float 计算二进制小数到 53 位精度。如有必要,结果会四舍五入。

学习点 2:Decimal 构造函数将二进制 float 无损地转换为小数(无舍入)。这往往会产生比您预期更多的精度位数(请参阅 Decimal FAQ 中的第 6 个问题)。

学习点 3:decimal 模块旨在将所有数字视为精确。只有计算结果会四舍五入到上下文精度。二进制浮点输入被准确地转换为十进制,并且在您对数字进行计算之前不会应用上下文精度(有关详细信息,请参阅十进制常见问题解答中的最终问答)。

执行摘要:在将数字交给十进制模块之前不要进行二进制浮点除法。让它以您想要的精度完成工作。

希望这有帮助:-)

关于python - 为什么 Python 的 Decimal 函数默认为 54 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12291825/

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