【问题标题】:Lua - round to doubleLua - 四舍五入
【发布时间】:2014-04-29 12:39:55
【问题描述】:


math.sqrt(2) 的结果似乎是不合理的,所以会发生这种情况:

> return  math.sqrt(2)
1.4142135623731
> return  math.sqrt(2) == 1.4142135623731
false

如何使这个“非理性”变量与以不同方式获得变量一样(如上面的示例)?

【问题讨论】:

  • Lua 故意去掉最后两位数字以隐藏简单数字的“非理性”,例如 (1/3)*3 :)
  • 为什么需要值完全相等,==?也许更简单的方法(比如将数字表示为具有固定精度的字符串或允许一些错误)可以满足您的需要?

标签: lua double rounding square-root


【解决方案1】:

变量不是无理数,它是浮点数,所以它甚至不是实数。 (但 2 的平方根是无理数,因此无法准确表示)

只需为您的文字使用更多数字,往返转换就会起作用。 IEEE 双精度浮点值需要 17 个有效十进制数字才能安全地表示它,而不是 14 个。

让我们看看当我们取数字 1 并在最低有效位上增加它时会发生什么。 ('0x' 表示数字是十六进制。这使我更容易控制此示例的位。):

x = 0x1.0000000000001
> print(x == 1)
false
> print(('%.16g'):format(x))
1
> print(('%.17g'):format(x))
1.0000000000000002

【讨论】:

    猜你喜欢
    • 2013-08-21
    • 2023-01-12
    • 2012-08-04
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多