Я изо всех сил пытаюсь понять причину этой проблемы. К точке:система зависает при разложении поплавка вместо целого числа
1), проходящей целое число (10) к следующей функции факторизационной работает сразу:
test() ->
X = 10,
F = factorize(X).
factorize(0) -> 1;
factorize(N) -> N * factorize(N-1).
2) Передача с плавающей точкой (10,0) вызовет процесс пучка повесить, принимая высокий процессор и даже не заканчивается. Обратите внимание, что это небольшое значение. Я могу факторизовать высокое целое число и получить почти немедленный ответ, но небольшое число с плавающей запятой 10.0 приведет к зависанию.
test() ->
X = 10.0, <-- NOTICE THE DOT ZERO 10.0
F = factorize(X).
factorize(0) -> 1;
factorize(N) -> N * factorize(N-1).
Вопрос: почему на Земле Эрл бы это повешение происходит с некоторым простым умножением возвратности поплавков?
Операции с плавающей запятой неточны. Скорее всего, вы никогда не попадаете в базовый случай со строгим равенством нулю. (Таким образом, ваш процессор масштабируется в негативах так быстро, как может). – Mat
вы прибивали его. Благодарю. PLS не стесняйтесь добавить ответ. Я добавил условие case, например case (N> = 1), и возвратил 1 в случае false, поэтому, вероятно, совпадение на factorize (0) не сработало для factorize (0.0) – gextra