【问题标题】:Roots of a quadratic function: math domain error [duplicate]二次函数的根:数学域误差
【发布时间】:2018-06-03 21:33:53
【问题描述】:

我想定义一个返回根值的函数。它应该总是返回一些东西。

如果 b**2 - 4ac

我的代码现在是这样的:

    from math import*
    def solve(a, b, c):
        x = sqrt(b**2 - 4*a*c)

        if x > 0:
           x1 = (-b + x)/(2*a)
           x2 = (-b - x)/(2*a)
           return [x1, x2]

        elif x == 0:
           x1 = x2 = -b/(2*a)
           return [x1]

       else:
           return []

【问题讨论】:

    标签: python python-3.x math square-root


    【解决方案1】:

    math.sqrt 未定义负数,因此返回 ValueError

    如果您希望返回负数的复平方根,请使用x**0.5

    x = (b**2 - 4*a*c)**0.5
    

    或者使用cmath.sqrt 实现:

    from cmath import sqrt
    
    x = sqrt(b**2 - 4*a*c)
    

    【讨论】:

    • 我明白了,现在的问题是'complex'和'int''的实例之间不支持''>',所以这意味着我必须更改所有代码,不是'是吗?无论如何,我不需要复杂的根,我只需要 [ ] 当 b**2 - 4*a*c
    • 好吧...你需要更改你的代码
    【解决方案2】:

    sqrt 不接受负值。为避免这种情况,您可以在计算平方根之前检查您的“其他”条件:

    from math import sqrt
    
    def solve(a, b, c):
        
        formula = b**2 - 4*a*c
    
        if formula < 0:
           return []
    
        x = sqrt(formula)
    
        if x > 0:
           x1 = (-b + x)/(2*a)
           x2 = (-b - x)/(2*a)
           return [x1, x2]
    
        elif x == 0:
           x1 = x2 = -b/(2*a)
           return [x1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多