带分数指数的Python指数算子

带分数指数的Python指数算子,python,python-3.x,Python,Python 3.x,我试图将Python用作一个简单的代数计算器,求解多项式等单个变量。当我使用带有分数指数的**操作符时,我看到了意想不到的结果。具体来说,它为不应该复杂的值生成复数: >>> (-1)**(1/3) (0.5000000000000001+0.8660254037844386j) 当然,-1的立方根在-1有一个实数根,这就是我想要回来的 为了避免这个问题,将价值提升到任意理性力量的正确方法是什么?(如果内置运算符由于舍入或其他原因无法执行此操作,我愿意使用库。) 我试图将Py

我试图将Python用作一个简单的代数计算器,求解多项式等单个变量。当我使用带有分数指数的
**
操作符时,我看到了意想不到的结果。具体来说,它为不应该复杂的值生成复数:

>>> (-1)**(1/3)
(0.5000000000000001+0.8660254037844386j)
当然,-1的立方根在-1有一个实数根,这就是我想要回来的

为了避免这个问题,将价值提升到任意理性力量的正确方法是什么?(如果内置运算符由于舍入或其他原因无法执行此操作,我愿意使用库。)

我试图将Python用作一个简单的代数计算器,求解多项式等单个变量

一种方法是使用NumPy。具体而言,使用并提取真实结果(如有):

>>> np.roots([1, 0, 0, 1])
array([-1.0+0.j       ,  0.5+0.8660254j,  0.5-0.8660254j])

请注意,
[1,0,0,1]
对多项式x3+1进行编码,其根正好是-1的立方根。

有三个-1的立方根,这是其中之一。这一点很好,但如果输入是实数,我希望输出是实数根。在这里,跳到复数似乎出乎意料。有没有办法强迫它保持在实数中?当x是一个实数负数时,你可能想检查一下,当且仅当n是一个奇数时,在C99下,
x**y
,其中
x
是负数,
y
不是一个未定义的整数。这是一种可能性,但是我试着把一些东西编码成python函数,而不仅仅是多项式。我不认为
np.root
能做到这一点?