为什么我会收到错误“为复数没有定义排序关系”?(Why am I receiving a “no o

2019-09-01 10:58发布

见这个问题的一些背景知识。 我对这个问题的主要问题得到解决,并建议我问另外一个问题了,我有第二个问题:

print cubic(1, 2, 3, 4)  # Correct solution: about -1.65
...
    if x > 0:
TypeError: no ordering relation is defined for complex numbers
print cubic(1, -3, -3, -1)  # Correct solution: about 3.8473
    if x > 0:
TypeError: no ordering relation is defined for complex numbers

一个真正的根和两个复根三次方程收到一个错误,尽管我使用的CMATH模块定义的立方根函数来处理复杂的数字。 为什么是这样?

Answer 1:

Python的错误信息是相当不错的,因为这些事情:不像某些语言,我可以提,他们不喜欢的字母随机集合。 所以当Python的抱怨比较

if x > 0:

TypeError: no ordering relation is defined for complex numbers

你应该把它在它的一句话:你想比较复杂的数字x ,看它是否是大于零,和Python不知道如何订购复数。 是2j > 0 ? 是-2j > 0 ? 等在模糊的脸,拒绝诱惑猜测。

现在,在特定情况下,你已经支就是否x.imag != 0 ,所以你知道, x.imag == 0 ,当你测试x ,你可以简单的实部,IIUC:

>>> x = 3+0j
>>> type(x)
<type 'complex'>
>>> x > 0
Traceback (most recent call last):
  File "<ipython-input-9-36cf1355a74b>", line 1, in <module>
    x > 0
TypeError: no ordering relation is defined for complex numbers

>>> x.real > 0
True


Answer 2:

它不是从你的示例代码什么明确的x是,但现在看来,这必须是一个复数。 有时,使用复杂的数值方法时,一个近似解将拿出作为,即使精确解应该是真正的复数。

复数没有自然排序,所以不等式x > 0是没有意义的,如果x是复杂的。 这是该类型的错误是什么。



文章来源: Why am I receiving a “no ordering relation defined for complex numbers” error?