如何修复 Erlang 中算术方程式的 3 个输入的异常错误?
How to fix exception error with 3 inputs into arithmetic equation in Erlang?
我正在想办法解决这个错误。我应该可以输入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)].
这是我在 运行 代码后得到的结果。
**异常错误:计算算术表达式时出错
在函数数学中:sqrt/1
称为 math:sqrt(-4)
来自 main 的调用:main/3(/Users/ianrogers/IdeaProjects/CS381 Projects/src/main.erl,第 14 行)
如果您在 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)
您的功能确实适用于 一些 输入。它在您发布的示例中不起作用,因为“称为 math:sqrt(-4)
”
您必须在计算平方根之前测试数字。当你自己计算的时候。
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.
我正在想办法解决这个错误。我应该可以输入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)].
这是我在 运行 代码后得到的结果。
**异常错误:计算算术表达式时出错 在函数数学中:sqrt/1 称为 math:sqrt(-4) 来自 main 的调用:main/3(/Users/ianrogers/IdeaProjects/CS381 Projects/src/main.erl,第 14 行)
如果您在 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)
您的功能确实适用于 一些 输入。它在您发布的示例中不起作用,因为“称为 math:sqrt(-4)
”
您必须在计算平方根之前测试数字。当你自己计算的时候。
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.