gpt4 book ai didi

python - 为什么/如何 (-1) ** 0.5 不准确?

转载 作者:行者123 更新时间:2023-12-05 05:38:09 29 4
gpt4 key购买 nike

Python 计算 imaginary unit i = sqrt(-1) 不准确:

>>> (-1) ** 0.5
(6.123233995736766e-17+1j)

应该正好是 1j(Python 称它为 j 而不是 i)。 -1 和 0.5 都被精确地表示,结果也可以被精确地表示,所以没有硬性的理由(即 floating point limitations )为什么 Python 不能正确地表示它。它可以。而 i=sqrt(-1) 作为 定义 令人相当失望的是 Python 弄错了。那为什么会这样呢?它如何计算不准确的结果?

最佳答案

当需要复杂的算法时,您的 Python 实现可能会将 xy 计算为 e em>y ln x,就像复杂的 C 函数 cexpclog 一样。这些又可能是用真实函数计算的,包括 lnsqrtatan2sincos ,和pow,但细节我们不用关心。

ln −1 是 πi。但是,π 不能用浮点格式表示。您的 Python 实现可能使用 IEEE-754“ double ”格式,也称为 binary64。在该格式中,最接近 π 的可表示值是 3.141592653589793115997963468544185161590576171875。所以 ln −1 可能计算为 3.141592653589793115997963468544185161590576171875 i。

那么 y ln x = .5 • 3.141592653589793115997963468544185161590576171875 i 是 1.5707963267948965579989817342720925807.95238787i

e1.5707963267948965579989817342720925807952880859375 i 也不能完全表示。其真实值约为 6.123233995736765886130329661375001464640•10−17 + .9999999999999999999999999999999981253003 i.

The nearest representable value to 6.123233995736765886130329661375001464640•10−17 is 6.12323399573676603586882014729198302312846062338790031898128063403419218957424163818359375•10−17, and the nearest representable value to .9999999999999999999999999999999981253003 is 1, so the calculated result is 6.12323399573676603586882014729198302312846062338790031898128063403419218957424163818359375•10−17 + 1 i.

关于python - 为什么/如何 (-1) ** 0.5 不准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72999837/

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