Floating point 为什么是';无穷大';Erlang'中不允许使用;什么是浮子?
Erlang(扩展为Elixir)支持浮点数 一些可能的浮动:Floating point 为什么是';无穷大';Erlang'中不允许使用;什么是浮子?,floating-point,erlang,elixir,precision,Floating Point,Erlang,Elixir,Precision,Erlang(扩展为Elixir)支持浮点数 一些可能的浮动: 1.2345 1.0e10 1.0e-42 Erlang支持NaN(NaN.在Erlang中)(但是我还没有发现一种输出NaN本身的方法) 但是,Erlang不支持无限。虽然像IEEE-754这样的通用标准规定,在执行1.0/0.0之类的操作时,应该返回无穷大,但Erlang会抛出一个错误的算术错误 当尝试创建“太大”的浮动(如1.0e400)时,也会发生同样的情况 这背后可能有一些(历史的?)原因。查看。/erts/emula
1.2345
1.0e10
1.0e-42
NaN.
在Erlang中)(但是我还没有发现一种输出NaN
本身的方法)
但是,Erlang不支持无限
。虽然像IEEE-754这样的通用标准规定,在执行1.0/0.0
之类的操作时,应该返回无穷大,但Erlang会抛出一个错误的算术错误
当尝试创建“太大”的浮动(如1.0e400
)时,也会发生同样的情况
这背后可能有一些(历史的?)原因。查看。/erts/emulator/sys/unix/sys\u float.c
在我看来,Erlang正在使用底层strod实现来转换为“标准”C浮点
在大多数unix系统上,浮点不是按照该标准实现的
在创建Erlang时,会生成无穷大的值反而会生成fpe信号错误。Erlang使用浮点数(不完全是IEEE 754 binary64)执行各种“坏”操作:将-0和+0合并到0,不执行+-SNAN、+-QNaN、+-denormals或+-Infinity
对于具有精确错误处理的实际科学计算,可能值得使用另一种语言,使用端口
,执行一些RPC或编写C/C++NIF
参考:
更新:我编写了一个简单的ieee754模块,它对二进制64浮点进行分类,并转换Erlang支持的浮点。Erlang既不支持NaN,也不支持无穷大-看起来您得到的是atomNaN
,而不是浮点。我不知道为什么Erlang不支持这些值,但是。。。