python:为啥将i计算为指数后float的零检测失败?
Posted
技术标签:
【中文标题】python:为啥将i计算为指数后float的零检测失败?【英文标题】:python: why does float's zero detection fail after calculating i as an exponent?python:为什么将i计算为指数后float的零检测失败? 【发布时间】:2016-05-24 00:35:29 【问题描述】:0 == ((-1)**.5).real
... 在 python 3.5.1 中为 False,而:
0 == complex(0,1).real
... 是真的。这两种情况如何不同处理? float 类的零检测功能什么时候起作用,什么时候不起作用?
【问题讨论】:
(-1)**0.5 -> (6.123233995736766e-17+1j)
在我的机器上,我假设是因为floating point math
【参考方案1】:
>>> (-1)**0.5
(6.123233995736766e-17+1j)
仅此而已 - 由于浮点变幻莫测,计算结果的实部并不完全为零。但在你的另一种情况下是:
>>> complex(0,1).real
0.0
顺便说一句,**
调用了一个通用求幂例程,它在幕后添加了几层浮点舍入误差。如果你知道你想要一个平方根,最好使用平方根函数:
>>> import cmath
>>> cmath.sqrt(-1)
1j
【讨论】:
【参考方案2】:计算分数幂 - 稍微简化 - r cis theta。由于 theta (pi) 不能精确地表示为二进制分数,因此结果不是 完全 您对手动计算的期望。您可以应用各种“在容差内相等”的函数来解决这个问题。
【讨论】:
以上是关于python:为啥将i计算为指数后float的零检测失败?的主要内容,如果未能解决你的问题,请参考以下文章
Python3实现计算BMI指数,跟我一起来计算你的BMI吧
为啥我会收到 ValueError: could not convert string to float in Python? [复制]