gpt4 book ai didi

Lua:减去十进制数不会返回正确的精度

转载 作者:行者123 更新时间:2023-12-03 18:27:40 25 4
gpt4 key购买 nike

我正在使用 Lua 5.1

print(10.08 - 10.07)

上面没有打印 0.01,而是打印 0.0099999999999998。

知道如何从这个减法中得到 0.01 吗?

最佳答案

你从减法中得到 0.01。它只是重复小数形式,精度损失很小。

Lua 使用 C 类型 double来表示数字。这几乎在您将使用的每个平台上都是一个 64 位二进制浮点值,具有大约 23 位十进制数字的精度。然而,任何精度都不足以精确地用二进制表示 0.01。这种情况类似于试图用十进制写 1/3。

此外,您正在减去两个幅度非常相似的值。这本身会导致额外的精度损失。

解决方案取决于您的上下文。如果您正在做会计,那么我强烈建议您不要使用浮点值来表示帐户值,因为这些小错误会累积,最终整个美分(或更糟)会出现或消失。最好以整数美分存储帐户,然后除以 100 进行显示。

一般来说,答案是要注意浮点固有的问题,其中之一就是这种微小的精度损失。通过将答案四舍五入到适当的数字位数进行显示,并且从不比较计算结果的相等性,可以轻松处理。

一些背景资源:

  • semi-official explanation在 Lua 用户 Wiki
  • IEEE floating point calculators 这个很棒的页面您可以在其中输入十进制值并查看它们的表示方式,反之亦然。
  • 维基上 IEEE floating point .
  • 维基上 floating point数字一般。
  • What Every Computer Scientist Should Know About Floating-Point Arithmetic是对细节最完整的讨论。

  • 编辑:毕竟添加了 WECSSKAFPA 文档。这确实值得研究,尽管在第一次通过时可能看起来有点压倒性。同样, Knuth Volume 2具有广泛的一般算术覆盖范围和很大一部分浮点数。而且,由于 lhf 提醒我它的存在,我插入了 Lua wiki 解释为什么浮点可以用作唯一的数字类型作为列表中的第一项。

    关于Lua:减去十进制数不会返回正确的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3580486/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com