erlang 仙丹浮点除法精度[复制]

vnzz0bqm  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(215)

此问题在此处已有答案

Is floating point math broken?(31个答案)
上个月关门了。
我在Elixir中观察到一些意外的浮点行为。

4.7 / 0.1 = 47.0 (good!)
4.8 / 0.1 = 47.9999999999 (bad!)
4.9 / 0.1 = 49 (good!)

虽然我理解fp精度的局限性,但在这种情况下,答案看起来是错误的。
奇怪的是,我在python中也尝试了这一点,得到了同样的结果,这更加神秘,当我把格式改为4.8 * (1/0.1)时,我得到了正确的答案(48.0)。
这是怎么回事?

bqujaahr

bqujaahr1#

这实际上是IEEE 754浮点数的正常行为,与erlang/elixil. Python或Nodejs无关,它们会返回相同的结果。
有关详细信息,请阅读此详细说明。

zlwx9yxi

zlwx9yxi2#

虽然我理解fp精度的局限性
显然不是:-)
与往常一样,如果需要小数精度,请使用Decimal

iex(2)> Decimal.div(Decimal.new("4.8"), Decimal.new("0.1"))
#Decimal<48>
iex(3)> Decimal.mult(Decimal.new("4.8"), Decimal.new("10"))
#Decimal<48.0>

相关问题