如何修复 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.