python中的二次方程

python中的二次方程,python,Python,我想用python计算这个二次方程: #This is just a small part of the program# a = 10.**-6 b = 10. c = 10.**-6 square = sqrt((b**2) - (4.*a*c)) numerator1 = -b - square numerator2 = -b + square denominator = 2.*a print square print numerator1 print numerator2 10^-

我想用python计算这个二次方程:

#This is just a small part of the program#
a = 10.**-6
b = 10.
c = 10.**-6

square = sqrt((b**2) - (4.*a*c))
numerator1 = -b - square
numerator2 = -b + square
denominator = 2.*a

print square
print numerator1
print numerator2
10^-6x^2+10x+10^-6=0

使用已知的公式,它在python中看起来是这样的:

#This is just a small part of the program#
a = 10.**-6
b = 10.
c = 10.**-6

square = sqrt((b**2) - (4.*a*c))
numerator1 = -b - square
numerator2 = -b + square
denominator = 2.*a

print square
print numerator1
print numerator2
现在我的问题是:四舍五入的错误会导致我的错误

square = 10.0
numerator1 = -20
numerator2 = -1.98951966013e-13

为什么我的第二个分子这么离谱-b在两种情况下都是一样的。。。这将使我的x2计算错误。如何修复此舍入错误

您的问题是由浮点精度问题引起的。你可以在这里读到更多

你可以通过四舍五入来克服这一点-

>>> round(numerator2, 3)
-0.0

我相信你会在这篇文章中找到一些答案:

此外,您应该注意:

打印正方形 10

>square

9.9999999999999801

如果我从中计算x1和x2,我得到:x1=-1e+07x2=-9.9476e-08(远…应该是-1e-07)。这两个数字非常接近。区别在于
-5.2399999999986E-10
是的,我尝试了这个,但这会使x2没有解决方案,但它应该是-1e-07?我不确定我是否遵循了这个问题
numerator2/分母
给出了
9.947598300641403e-08
,非常接近
-1e-07
(然后请参阅我关于浮点精度错误的说明)。这两个数字之间的差异是
-5.23999999986e-10
哦,对不起,我把我之前的另一个数字弄错了,那是个很不对劲的数字。但无论如何,我的问题是:我希望它能准确地显示-1e-07作为答案,而不是一个非常接近的数字:)也许我可以在你发布的链接中找到答案。非常感谢。我怀疑你是否能准确地做到这一点<代码>圆形(9.947598300641403e-08,7)给出了
-1e-07
,但这可能有点不灵活。这已经足够接近了:)非常感谢!!是的,我注意到了这一点,并且花了几个小时试图在代码中对正方形本身进行四舍五入,这样我就可以在所有方程中使用它…以获得更接近的表示,即使正方形是一个我无法用二进制数表示的数。