【问题标题】:Elixir: How to calculate floating point precision > 15?Elixir:如何计算浮点精度> 15?
【发布时间】:2017-09-23 02:32:51
【问题描述】:

我需要能够计算比Float 类型似乎允许的更多的小数位数:15。

iex(19)> Float.round(1/7, 15)
0.142857142857143
iex(20)> Float.round(1/7, 16)
** (FunctionClauseError) no function clause matching in Float.round/2
    (elixir) lib/float.ex:163: Float.round(0.14285714285714285, 16)

根据实用程序员的Programming Elixir一书:

浮点数是 IEEE 754 双精度,精度约为 16 位

是否有任何类似于 Ruby 的 BigDecimal 允许任意精度浮点十进制算术的东西?或者有什么方法可以在 Elixir 中轻松实现?

【问题讨论】:

  • 该死。如果我问你为什么需要这么高的精度,你能叫我好奇吗?
  • 我正在解决欧拉问题 #26:倒数循环,这需要您查看单位分数 1/2、1/3、... 1/999 的小数位数来尝试找出其中最长的重复数字序列。使用魔术神奇狗 Fred 建议的 Decimal 库,我能够以 3000 位的精度找到答案!

标签: elixir


【解决方案1】:

有允许任意精度的 Decimal 库,但不具备使用 Float 获得的所有可用数学例程。

https://hex.pm/packages/decimal

Decimal 的工作原理是尽可能多地保留输入数字的初始精度,并且仅在存在不可避免的舍入误差时截断到指定的精度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多