为什么在Python中负数的平方根不是纯粹虚构的?

阿克沙特大桶

当我(-1)**0.5用Python评估时,结果为(6.123233995736766e-17+1j)这个数字是多少1j如何得到结果?

kaya3

6.123233995736766e-17是用科学计数法表示的一个非常小的数字-用十进制表示,该数字是0.00000000000000006123233995736766结果的正确的实数部分应恰好为零,因此结果是错误的,但只是略有错误。通常,涉及浮点数的计算不会给出确切的结果;有关说明,请参见浮点数学运算是否已损坏?

如果要计算复杂的平方根并保证负实数的平方根纯粹是虚数,则可以编写一个专门具有以下行为的函数:

def my_sqrt(z):
    z = complex(z)
    if z.real < 0 and z.imag == 0:
        return 1j * (-z.real) ** 0.5
    else:
        return z ** 0.5

例子:

>>> my_sqrt(-1)
1j
>>> my_sqrt(-2)
1.4142135623730951j
>>> my_sqrt(9)
(3+0j)
>>> my_sqrt(-3 + 4j)
(1.0000000000000002+2j)

请注意,由于浮点数的错误,某些结果会有些许错误,例如的真平方根-3 + 4j应为1 + 2j如果在所有可能的情况下都希望获得准确的结果,请考虑学习SymPy

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档