gpt4 book ai didi

Python 师 ://vs math. 楼

转载 作者:太空宇宙 更新时间:2023-11-04 08:25:27 25 4
gpt4 key购买 nike

你好!在 python 中考虑以下内容:

import math

num = # Any float...
div = # Any float...

result_1 = math.floor(num / div)
result_2 = num // div

are_equal = result_1 == result_2
print(are_equal)

我听说 are_equal 应该始终为 True,无论 numdiv 的值如何。

奇怪的是,我发现了一个不成立的情况:num = 146097.0div = 365.2425

这令人惊讶吗?这样的例子很多吗?

为什么 (146097.0//365.2425) == math.floor(146097.0/365.2425)

最佳答案

div 不完全是 365.2425;它是有理数 3652425/10000 的浮点近似值。

>>> 365.2425.as_integer_ratio()
(6425414011327611, 17592186044416) # Not (3652425, 10000) or (146097, 400)

因此,该比率不是恰好 400,而是比 / 四舍五入到 400 略小的值。// 然而,降低了内部值(value)。 Decimal 类型提供任意精度,因此您可以看到使用 365.2425 生成的近似值的效果:

>>> decimal.Decimal(365.2425)
Decimal('365.24250000000000682121026329696178436279296875')
>>> decimal.Decimal(146097) / decimal.Decimal(365.2425)
Decimal('399.9999999999999925296642496')

如果您使用字符串而不是浮点文字作为 Decimal 的参数,您将获得产生整数比 400 的有理分母。(Decimal code> 可以将字符串解析为一个精确的有理数,而不是从一个已经是近似值的浮点值开始。)

>>> decimal.Decimal(146097) / decimal.Decimal('365.2425')
Decimal('4E+2')

关于Python 师 ://vs math. 楼,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57727768/

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