【问题标题】:Elixir: (ArithmeticError) bad argument in arithmetic expressionElixir:(ArithmeticError)算术表达式中的错误参数
【发布时间】:2016-07-22 18:40:41
【问题描述】:

我有一个简单的计算:

Enum.reduce(1..5, 0, &:math.pow/2)

但我收到此错误:

** (ArithmeticError) bad argument in arithmetic expression
    (stdlib) :math.pow(5, 262144.0)
    (elixir) lib/enum.ex:1478: anonymous fn/3 in Enum.reduce/3
    (elixir) lib/range.ex:80: Enumerable.Range.reduce/5
    (elixir) lib/enum.ex:1477: Enum.reduce/3

Elixir 对算术计算有限制吗?

【问题讨论】:

  • 您真的是想用pow 减少1..199 吗?这将是一个非常巨大的数字。即使是1..5 也会产生一个大约 180,000 位数字的数字 (Source)。
  • 我正在学习 Elixir,我正在自我介绍它的局限性。我知道这是一个巨大的数字。但我实际上需要了解这些限制。顺便说一句,180k 位有什么问题?它只是一个很大的数字。
  • 那只是1..51..10 将产生 this 并且您正在尝试运行 1..199
  • 这只是一个例子。我减少了有问题的数字。这不是重点。

标签: math elixir


【解决方案1】:

您正在尝试计算5^262144 - 这是一个非常庞大的数字,erlang 可以摆脱困境。这样的数字甚至不能用浮点数表示——最大浮点数约为1.7e308

【讨论】:

  • 所以我想我不得不问,如何在 Erlang 中计算 5^262144? Here
  • 为什么不可能,我认为 erlang 有任意长度的数字(就像 python,我可以在那里做 5**262144 并得到答案)
  • @krzyk 不可能,你能得到答案吗?
  • 虽然 erlang 有任意大小的整数,但 :math 模块对浮点数进行操作,并且只能处理可以用浮点数表示的值。这个模块实际上是 C 中 math.h 的一个薄包装器。我不相信标准库有一个模块来执行任意整数幂运算。
猜你喜欢
  • 2021-03-27
  • 2012-06-21
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多