Как исправить ошибку исключения с 3 входами в арифметическое уравнение в Erlang?

#erlang #quadratic

#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)].
  

Вот результат, который я получил после запуска кода.

** ошибка исключения: произошла ошибка при вычислении арифметического выражения в функции math:sqrt/1, вызываемой как math:sqrt(-4) при вызове из main:main/3 (/Users/ianrogers/IdeaProjects/ CS381 Projects/src/main.erl, строка 14)

Ответ №1:

Вы должны проверить число перед вычислением квадратного корня. Как вы это делаете при вычислении самостоятельно.

 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.
  

Ответ №2:

Если вы введете отрицательные числа, 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) «