为什么Erlang的花车中不允许使用'Infinity'?

Qqw*_*qwy 8 floating-point precision erlang elixir

Erlang(以及扩展名Elixir)支持浮点数.

一些可能的浮点数:

  • 1.2345
  • 1.0e10
  • 1.0e-42

Erlang支持NaN(nan.在Erlang中)(但我还没有发现一个输出nan自身的方法).

但是,Erlang没有支持Infinity.虽然像IEEE-754这样的通用标准表明,Infinity在做某事时应该返回1.0/0.0,而Erlang会抛出一个bad arithmetic error.

尝试制作"太大"的浮子时也会发生同样的情况1.0e400.

这背后可能有一些(历史?)原因.

Fre*_*Dog 5

查看./erts/emulator/sys/unix/sys_float.c

在我看来,Erlang正在使用底层的strtod实现转换为"标准"C浮点数.

在大多数unix系统上,在创建Erlang时,浮点没有实现到该标准,但是生成Infinity的值会产生fpe信号错误.


小智 5

Erlang 用浮点数(不完全是 IEEE 754 binary64)做各种“坏”的事情:将 -0 和 +0 合并为 0,不做 +-SNaNs、+-QNaNs、+-denormals 或 +-infinity。

对于具有精确错误处理的实际科学计算,可能值得使用另一种语言Port进行 RPC 或编写 C/C++ NIF。

参考:http : //steve.hollasch.net/cgindex/coding/ieeefloat.html

更新:在这里写了一个简单的 ieee754 模块,它对 binary64 浮点数进行分类并转换那些 Erlang 支持的浮点数。