如何在Erlang的算术方程中使用3个输入修复异常错误?

问题描述

我正在尝试找出解决错误方法。我应该能够输入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)”而无法正常工作