Lua - 圆到双

时间:2014-04-29 12:39:55

标签: lua double rounding square-root


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

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

我如何做到这一点"不合理的"变量相同,好像我得到变量的方式不同(如上例所示)?

1 个答案:

答案 0 :(得分:4)

变量不是非理性的,它是浮点数,所以它甚至不是真的。 (2的平方根虽然是不合理的,因此无法用它准确表示)

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

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

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