我是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
答案 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"