Ruby二次方程式错误

时间:2014-12-27 07:30:04

标签: ruby

我是Ruby编程语言的新手。我正在尝试编写二次方程式,但它给了我一个错误。这是我的代码。

a, b, c = 5, 2, 1

x1 = -b + Math.sqrt(b**2 - 4 a*c) / 2 * a
x2 = -b - Math.sqrt(b**2 - 4 a*c) / 2 * a

puts x1
puts x2

2 个答案:

答案 0 :(得分:3)

5x 2 + 2x + 1 = 0 只有复杂的解决方案。您可能希望使用CMath,这样您就可以从负数的平方根得到复数。另一个问题是操作数的分组:

require 'cmath'

a, b, c = 5, 2, 1    
x1 = (-b + CMath.sqrt(b**2 - 4*a*c)) / (2 * a)
x2 = (-b - CMath.sqrt(b**2 - 4*a*c)) / (2 * a)

答案 1 :(得分:1)

代码在*4之间缺少a*c

x1 = -b + Math.sqrt(b**2 - 4*a*c) / 2 * a
x2 = -b - Math.sqrt(b**2 - 4*a*c) / 2 * a

修复语法错误后,您将获得Math::DomainError,因为表达式b**2 - 4*a*c的值为-16; Math::sqrt不允许负值。

为了避免这个错误,你需要保护线路:

d = b**2 - 4*a*c
if d >= 0:
    x1 = -b + Math.sqrt(d) / 2 * a
    x2 = -b - Math.sqrt(d) / 2 * a
    puts x1
    puts x2
else:
    puts "No solution"