为什么 Erlang 的浮点数中不允许使用“Infinity”?

2023-11-26

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.

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


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

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

在大多数 UNIX 系统上,浮点并未按照该标准实现 在 Erlang 创建时,但会生成 Infinity 的值反而会生成 fpe 信号错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Erlang 的浮点数中不允许使用“Infinity”? 的相关文章

  • 尽管浮点数相同,但它们并不相等? [复制]

    这个问题在这里已经有答案了 下面的程序输出This No is not same 当两个数字相同时为什么会这样做 void main float f 2 7 if f 2 7 printf This No is same else prin
  • 预加载所有关系

    我有一个与此类似的 ERM ModelA ModelB ModelC 我得到模型及其模型如下 modela Repo get ModelA 1 modela preload modela modelb 现在我可以访问ModelBs with
  • 如何在简单的 Elixir 脚本中加载 Elixir 库?

    在 ruby 脚本中 我可以简单地执行以下操作 require some gem SomeGem do something 我怎样才能在 Elixir 中做类似的事情exs脚本而不创建一个全新的混合项目 到目前为止 我已经在谷歌上搜索了执行
  • Elixir 中的多行注释

    大多数语言都允许块注释和多行命令 例如 HTML 中的多行注释如下所示 在 Elixir 中 我发现的最接近的东西来自 EEx docs https hexdocs pm eex EEx html EEx智能引擎似乎从源中被丢弃 即使它们是
  • 如何在erlang中读取mnesia数据库的所有记录?

    我是 erlang 新手 我需要对从 mnesia 数据库获取的所有记录进行一些操作 Result mnesia dirty read mydatabase key1 key2 case Result of gt DEBUG No such
  • 如何解决 boost::multi precision::cpp_dec_float 除法错误

    除以boost multiprecision cpp dec float有某种舍入误差 如下 include
  • 使用 gitbash 和 elixir 在 vscode 中输出垃圾而不是颜色

    我开始学习elixir并成功让iex有ansi颜色 问题是在 vscode 的终端中 输出看起来像垃圾 iex Interactive Elixir 1 8 1 press Ctrl C to exit type h ENTER for h
  • Elixir:模式匹配对于元组和映射的工作方式不同

    在 Elixir 中 如果我尝试模式匹配以下两个元组 a 1 2 我收到匹配错误 但如果我对两张地图做同样的事情 x a x 1 y 2 它工作正常 并且a绑定到 1 我可以明白为什么匹配两个元组会出错 但为什么匹配映射不会出错 在第一个示
  • Erlang:binary_to_atom 填充atom 表空间安全问题

    我听说 Erlang 中的原子表可能会被填满 从而使系统对 DDoS 开放 除非您增加可以创建的原子数量 看起来 binary to existing atom 2 就是这个问题的解决方案 谁能准确解释一下如何是否存在安全隐患以及如何解决这
  • C++长双精度打印所有数字

    关于我的问题 我在这里看到了一篇文章 但不明白 因为我是 C 新手 我编写了一个小脚本 它从用户那里获取一个数字 然后脚本打印出输入数字的阶乘 一旦我输入了像 30 这样的更大的数字 脚本就不会打印出所有的数字 输出就像 2 6525285
  • C++ 计算比 double 或 long double 更精确

    我正在自学 C 等等这道练习题 http www reddit com r dailyprogrammer comments pp53w 2142012 challenge 6 easy 它要求编写可以计算 PI gt 30 位的代码 我了
  • 限制纬度和经度值的模数

    我有代表纬度和经度的双精度数 我可以轻松地将经度限制为 180 0 180 0 具有以下功能 double limitLon double lon return fmod lon 180 0 360 0 180 0 这是有效的 因为一端是排
  • 在 R 中,如何让 PRNG 在平台之间给出相同的浮点数?

    在 R 4 1 1 中运行以下代码会在平台之间产生不同的结果 set seed 1 x lt rnorm 3 3 print x 22 0 83562861241004716 intel windows 0 8356286124100471
  • Erlang 进程如何(如果有的话)映射到内核线程?

    Erlang 因能够支持许多轻量级进程而闻名 它之所以能做到这一点 是因为它们不是传统意义上的进程 甚至不是 P 线程中的线程 而是完全在用户空间中的线程 这很好 实际上很棒 那么 Erlang 线程如何在多核 多处理器环境中并行执行呢 当
  • 空序列的算术平均值是多少?

    免责声明 不 我没有找到任何明显的答案 这与我的预期相反 在寻找代码示例时 算术平均值 我可以通过谷歌找到的前几个例子似乎是这样定义的 空序列生成的平均值为0 0 eg here https rosettacode org wiki Ave
  • 如果是整数,则使用 sprintf 格式化没有小数位的浮点数

    最初 我使用 sprintf 和始终保留 2 位小数的浮点数 使用以下代码 static void MyFunc char buffer const float percentage sprintf buffer 2f percentage
  • 如何在 Elixir 中展平嵌套列表?

    我有一个嵌套列表 1 2 3 4 5 6 我怎样才能把它压平 使它变成 1 2 3 4 5 6 无需重新发明轮子 只需使用List flatten 1 https hexdocs pm elixir List html flatten 1
  • 在 C# 中测试两个双精度数相等的经验法则?

    假设我有一些代码可以执行一些浮点运算并将值存储在双精度数中 由于某些值无法用二进制完美表示 因此如何在合理的确定程度上测试相等性 如何确定 合理 的含义 Can double Epsilon以某种方式使用 Update 夫妇的事情 正如 h
  • 如何手动(按位)执行(浮动)x?

    现在 这是我应该实现的函数的函数头 float from int Return bit level equivalent of expression float x Result is returned as unsigned int bu
  • Erlang:查找我的 IP 地址

    我正在尝试使用 Redis 完成负载均衡器 登录服务器 游戏服务器的某些部分设置 负载均衡就是其中之一 在我的 Redis 负载平衡实例中 我使用有序集 关键是应用程序名称 成员是游戏服务器的 IP 地址 这就是我的问题 我想在 erlan

随机推荐