Erlang (und nach Erweiterung Elixir) unterstützt Fließkommazahlen.
Einige mögliche Floats:
1.2345
1.0e10
1.0e-42
Erlang unterstützt NaN ( nan.
in Erlang) (ich muss jedoch noch eine Methode finden, die nan
selbst ausgibt).
Erlang hat jedoch keine Unterstützung für Infinity
. Während gängige Standards wie IEEE-754 angeben, dass man Infinity
zurückgeben soll, wenn man zB 1.0/0.0
macht, wirft Erlang ein bad arithmetic error
.
Dasselbe passiert, wenn man versucht, Floats zu erstellen, die wie 1.0e400
zu groß sind.
Es gibt wahrscheinlich einen (historischen?) Grund dafür.
Erlang macht alle möglichen "schlechten" Dinge mit floats (nicht ganz IEEE 754 binary64): conflate -0 und +0 bis 0, nicht + -SNaNs, + -QNaNs, + -denormals oder + -infinity .
Für tatsächliche, wissenschaftliche Berechnungen mit präziser Fehlerbehandlung lohnt es sich wahrscheinlich, in eine andere Sprache zu wechseln, entweder mit Port
, etwas RPC zu machen oder C / C ++ NIF zu schreiben.
Referenz: Ссылка
Update: Ich schrieb ein triviales ieee754-Modul hier , das binary64-Floats klassifiziert und diese konvertiert dass Erlang unterstützt.
Suchen in ./erts/emulator/sys/unix/sys_float.c
Es scheint mir, dass Erlang die zugrunde liegende Implementierung von strtod benutzt, um in "Standard" C-Floats zu konvertieren.
Auf den meisten Unix-Systemen wurde der Gleitkomma-Punkt nicht in diesen Standard implementiert Zu der Zeit, als Erlang erstellt wurde, generieren Werte, die Infinity generieren würden, stattdessen fpe-Signalfehler.
Tags und Links erlang floating-point elixir precision