【问题标题】:Integers and floating point numbers in lualua中的整数和浮点数
【发布时间】:2023-01-21 02:05:08
【问题描述】:

我真的对 lua 中的数字实现感到困惑。

lua 网站上的文档非常清楚(https://www.lua.org/pil/2.3.html):

数字类型表示实数(双精度浮点数)。 Lua 没有整数类型,因为它不需要它。对于浮点运算错误存在一种普遍的误解,有些人担心即使是简单的增量也会对浮点数产生奇怪的影响。事实是,当您使用 double 表示整数时,根本没有舍入误差(除非该数字大于 100,000,000,000,000)。具体来说,一个 Lua 数字可以表示任何长整数而不会出现舍入问题。此外,大多数现代 CPU 执行浮点运算的速度与(甚至更快)整数运算一样快。

这是完全有道理的。 但是在这个最简单的例子中怎么会发生整数溢出呢?

$ lua
Lua 5.3.6  Copyright (C) 1994-2020 Lua.org, PUC-Rio
> 9223372036854775807 + 1
-9223372036854775808

【问题讨论】:

    标签: lua


    【解决方案1】:

    在 Lua(还有其他语言)中,整数使用 64 位存储(这是大多数现代系统上整数的标准大小)。当一个整数超过 64 位可以存储的最大值(即 2^63-1)时,它会“环绕”到 64 位可以存储的最小值(-2^63)。这称为整数溢出。

    在此特定示例中,您将 1 加到 Lua 整数的最大可表示值 (9223372036854775807),这会导致该值溢出并“环绕”到最小可表示值 (-9223372036854775808)。

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 2014-10-01
      • 2011-01-04
      • 2021-03-11
      • 2017-07-26
      • 2011-01-10
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      相关资源
      最近更新 更多