#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)
«