Erlang(以及扩展名Elixir)支持浮点数。
一些可能的浮动:
1.2345
1.0e10
1.0e-42
Erlang在Erlang中支持NaN(nan.
)(但我还没有发现一种输出nan
本身的方法。)
但是,Erlang不支持Infinity
。虽然像IEEE-754这样的通用标准规定在执行Infinity
之类的操作时应该返回1.0/0.0
,而Erlang会抛出bad arithmetic error
。
当试图制作太大的浮子时会发生同样的情况。比如1.0e400
。
这背后可能有一些(历史?)原因。
答案 0 :(得分:5)
查看./erts/emulator/sys/unix/sys_float.c
在我看来,Erlang正在使用底层的strtod实现转换为“标准”C浮点数。
在大多数unix系统上,浮点数没有实现到该标准 在创建Erlang时,但是会产生Infinity的值会产生fpe信号错误。
答案 1 :(得分:3)
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模块here,它对binary64浮点数进行了分类并转换了Erlang支持的模块。