问题描述
我正在尝试找出解决此错误的方法。我应该能够输入3个数字,它将解决二次方程的X值。
-module(main).
-export([main/3]).
main(A,B,C) ->
[(-B + math:sqrt(B * B - 4 * A * C)) / (2 * A),(-B - math:sqrt(B * B - 4 * A * C)) / (2 * A)].
这是我运行代码后得到的结果。
**异常错误:评估算术表达式时发生错误 在函数math:sqrt / 1中 称为math:sqrt(-4) 来自main:main / 3(/ Users / ianrogers / IdeaProjects / CS381 Projects / src / main.erl,第14行)的调用中
解决方法
在求平方根之前,必须先测试数字。当您自己进行计算时,就这样做了。
main(A,B,C) ->
D = (B * B - 4 * A * C) + 0.0,% add 0.0 to cevert to float in any case
case D of
0.0 -> {ok,-B / (2 * A)};
D when D > 0.0 -> {ok,[(-B + math:sqrt(D)) / (2 * A),(-B - math:sqrt(D)) / (2 * A)]};
_ -> {error,no_real_solution}
end.
,
如果您在math:sqrt/1
中输入负数,则会出现错误。例如
2> math:sqrt(-1).
** exception error: an error occurred when evaluating an arithmetic expression
in function math:sqrt/1
called as math:sqrt(-1)
您的功能确实可用于 some 输入。在您发布的示例中,由于“称为math:sqrt(-4)
”而无法正常工作