gpt4 book ai didi

python - 为什么在 Pi 的整数倍处 torch.sin() 和 numpy.sin() 的评估存在数量级?

转载 作者:行者123 更新时间:2023-12-05 08:49:32 31 4
gpt4 key购买 nike

为什么 Pytorch 和 Numpy 的三角函数在以 Pi 的整数倍计算时会导致数量级上如此巨大的差异?

>>> torch.sin(torch.ones(1)*2*np.pi)
tensor([1.7485e-07])
>>> np.sin(np.ones(1)*2*np.pi)
array([-2.4492936e-16])

最佳答案

扩展你得到的答案,但使用普通的 Python:

>>> import math
>>> math.sin(2 * math.pi)
-2.4492935982947064e-16

Python 使用 64 位 float ,这与 numpy 结果非常匹配。

IEEE-754 64 位 float 有 53 位精度,但 32 位 float 只有 24 位。所以让我们将输入舍入到 24 位有效位,看看会发生什么:

>>> x = 2 * math.pi
>>> m, e = math.frexp(x)
>>> m *= 2**24
>>> m = round(m)
>>> y = math.ldexp(m, e - 24)
>>> math.sin(y)
1.7484556000744883e-07

这与 torch 结果非常接近。

关于python - 为什么在 Pi 的整数倍处 torch.sin() 和 numpy.sin() 的评估存在数量级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63910283/

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