用Python验证卡尔丹公式出错,怎么解决

代码如下:
 

import random

p = random.randint(1,10)
q = random.randint(1,10)

#p = 0
#q = 1

print("p = ", p)
print("q = ", q)

#dr为判别式
dr = (q/2)**2 + (p/3)**3
print("dr = ", dr)


u = (-q/2 + dr**0.5)**(1/3)
v = (-q/2 - dr**0.5)**(1/3)
print("u = ", u)
print("v = ", v)

x = u + v
print("x = ", x)

#zero用于判断所求x是否为 x**3 + p * x + q的根
zero = x**3 + p * x + q
print("zero = ", zero)

运行结果如下:

当p = 0,q = 1时效果还好,但是换其他数字时偏差就很大了

请问为什么会这样,如何解决?

你应该学会封装,将算法封装成函数,我只能帮你整理程序,算法你自己检查一下有没有问题!

def operation(p, q):
    p = float(p)
    q = float(q)
    def check_dr():
        dr = (q/2)**2 + (p/3)**3
        return dr
    dr = check_dr()
    u = (-q/2 + dr**0.5)**(1/3)
    v = (-q/2 - dr**0.5)**(1/3)
    x = u + v
    zero = x**3 + p * x + q
    return zero

p = input('请输入数字p:')
q = input('请输入数字q:')
print(f'运算结果是:{operation(p,q)}')

 

最好把公式发出来