我在Python中创建了一个二次方程,目的是找到输入的根。我希望有非常具体的输出,但不知道如何使用我编写代码的方式转换/舍入浮点数,或者如何让代码返回1e-9。任何想法都非常感激。
def find_roots(a,b,c):
d=(b**2)-(4*a*c)
if d <0:
print ([])
elif d==0:
x=(np.float128(-b+math.sqrt(d))/(2*a))
print(x)
else:
x1=(np.float128(-b-math.sqrt(d))/(2*a))
x2=(np.float128(-b+math.sqrt(d))/(2*a))
list=[x1,x2]
print (sorted(list, reverse=False))
find_roots(-3,5,2)
find_roots(0,5,4)
find_roots(1e-8,10,1e-8)
我目前正在:
[-0.33333333333333334, 2.0]
[-inf, nan]
[-999999999.99999999791, 0.0]
作为输出并希望获得:
[-1.0/3.0, 2.0]
[-0.8]
[1e-8, 10.0, 1e-8]
答案 0 :(得分:0)
您想要的输出需要三种不同格式的结果数字:小数,小数和科学(或指数)。您可以将另一个参数传递给您的函数,该函数告诉您的函数如何格式化数字或执行格式化本身(在这种情况下参数将是一个函数)。
例如:
def decimal_to_scientific(x):
return <the formatted x (you can find this online)>
def find_roots(a, b, c, format):
...
elif d == 0:
...
x = format(x)
print x
...
find_roots(1e-8, 10, 1e-8, decimal_to_scientific)
答案 1 :(得分:0)
find_roots(0, 5, 4)
这并没有完全描述二次方程。这是一个线性y = 5*x + 4
等式。当你传入2*a
时,将一个想要除以a == 0
的例程称为不公平。提出异常是正确的。也许numpy的宽容行为在这里没有给你任何好处。
如果真的是你想要的话,请考虑将数字表示为rationals。