Почему «бесконечность» не допускается в поплавках Эрланга?

Erlang (и, соответственно, Elixir) поддерживает числа с плавающей точкой.

Некоторые возможные Поплавки:

1.23451.0e101.0e-42

Эрланг поддерживает NaN (nan. в Erlang) (однако мне еще предстоит открыть метод, который выводитnan сам).

Тем не менее, Эрланг не имеет поддержкиInfinity, В то время как общие стандарты, такие как IEEE-754, утверждают, что следует вернутьсяInfinity когда делаешь такие вещи, как1.0/0.0вместо этого Эрланг бросаетbad arithmetic error.

То же самое происходит при попытке сделать поплавки «слишком большими», как1.0e400.

Вероятно, есть какая-то (историческая?) Причина этого.

 legoscia28 июн. 2016 г., 18:04
Эрланг не поддерживает ни NaN, ни бесконечность - похоже, у вас есть атомnan вместо этого, который не является поплавком. Я не знаю, почему Эрланг не поддерживает эти ценности, хотя ...

Ответы на вопрос(2)

Решение Вопроса

binary64): объединяет -0 и +0 в 0, не делает + -SNaNs, + -QNaNs, + -denormals или + -infinity.

Для реальных научных вычислений с точной обработкой ошибок, вероятно, стоит перейти на другой язык либо сPortДелаем RPC или пишем C / C ++ NIF.

Ссылка:http://steve.hollasch.net/cgindex/coding/ieeefloat.html

Обновить: Я написал тривиальный модуль ieee754Вот которая классифицирует двоичные 64-плавающие и конвертирует те, которые поддерживает Erlang.

мне кажется, что Erlang использует базовую реализацию strtod для преобразования в «стандартные» C-числа.

В большинстве систем Unix плавающая точка не была реализована в этом стандарте во время создания Erlang, но значения, которые генерировали бы Infinity, вместо этого генерировали ошибки сигнала fpe.

Ваш ответ на вопрос