比较python

时间:2016-11-15 06:04:25

标签: python python-3.x floating-point

我正在学习如何将Python 3用于科学计算。在练习中,我被要求实现一个返回二次方程的实数或复数根的函数,以及实现一个测试函数来验证函数的准确性。我在比较两个浮点值时遇到了麻烦。

这是我的功能:

def roots(a, b, c):
    from numpy.lib.scimath import sqrt       #Handles real and complex numbers 
    r = sqrt(b**2 - 4*a*c)                     

    sol_1 = (-b + r)/(2*a)
    sol_2 = (-b - r)/(2*a)

    return sol_1, sol_2 

这是我的test_function:

def test_roots_real():
    a = 5; b = 6; c = 1     #test parameters (roots should be -0.2(+) and -1(-)
    exact_sol_1 = -0.2
    exact_sol_2 = -1

    sol_1, sol_2 = roots(a,b,c)
    success = (abs(exact_sol_1 - sol_1) < 1E-14) and (abs(exact_sol_2 - sol_2) < 1E-14)  #Never use == with floats!
    msg = 'Cannot find accurate solutions'
    assert success, msg

test_roots_real()

问题在于我将计算出的解与其各自的精确解进行比较。

如果我运行roots(5,6,1),我会获得(-0.20000000000000001, -1.0)

阈值为1E-14,没有问题(如预期的那样)。但是,如果我将其更改为更小的东西(例如1E-25),我应该不会出现错误,不是吗?我想知道发生了什么,我非常感谢社区的反馈。

谢谢!

编辑:

另外,我怎么能使用相同的逻辑但比较两个复数?我从不与他们合作。

0 个答案:

没有答案