Lua中一个数字的最大值是多少?

时间:2009-06-03 16:31:33

标签: time lua numbers

在文档中似乎没有明确的答案。

我有兴趣增加一个变量time,它计算自程序启动以来的秒数。如果最大值可以计入未来,例如100年,那么我不关心让变量永远增量。否则,我将不得不考虑将time重置为0的好点。

6 个答案:

答案 0 :(得分:25)

默认编译的

,在大多数编译器上,Number是double,这是IEEE 64位浮点数。这意味着10位指数,因此最大数量大约是2 ^ 1024,或5.6e300年。那是很长一段时间。

现在,如果你正在递增它,你可能对整数范围更感兴趣。 52位尾数意味着可以使用整数精度的最高数字是2 ^ 52,大约4.5e15。在31'557,600秒/年,这是1.427e8,接近1.5亿年。任何过程的运行时间仍然很长

更新2014-12-30 :Lua 5.3(将在任何时刻发布)增加对整数值的支持,通过编译标志选择32位或64位。

答案 1 :(得分:8)

虽然tydok对PiL 2.3的引用既正确又合适,Javier's answer实际上是正确的,但我认为Lua中对数字的讨论应该用其他一些细节来讨论。

Lua解释器旨在通常作为配置和/或脚本语言嵌入到应用程序中。为应用程序构建时,通常会配置一些适合的功能。

用于数字的确切数字类型可用于配置。当编译没有硬件浮点的平台时,加载第三方模块并不重要(特别是在嵌入式系统或机顶盒游戏控制台应用程序中),那么选择整数类型而不是默认值{{1}是合理的。 }。偶尔,切换到double也是合理的。

但是,有些应用需要64位整数,或者大多数数字可以是整数,但偶尔需要浮点运算。对于这些情况,Lua核心有LNUM patch

LNUM更改核心,以便将数字存储为整数或浮点数,并允许多个可配置的选择以获得每个数字的精度。

因此,对Lua数的最大值问题的底线答案是,它取决于在编译时选择的解释器的配置,以及您是否担心可表示的最大幅度或最大整数。即便如此,已经做了大量整数与浮点表示相匹配的工作。

答案 2 :(得分:1)

这是其他几个答案中提到的最高值。这就是1.8e308的来源:

local HighestNumber = 0
for i = 971, 1023 do
    HighestNumber = HighestNumber + (2 ^ i)
end

我没有足够的声誉来发布图片,但显然这可以表示为西格玛总和。

答案 3 :(得分:0)

我在lua用户网站上找到了this email

  

除了隐式地,Lua核心不使用64位数据类型   通过size_tptrdiff_t(在64位方框上恰好是64位)。

     

sizeof(float)== 4
     sizeof(double)== 8

     

您可以将lua_Number定义为double(默认值),float或任何整数   至少32位。虽然有一些副作用和一些扩展   由于浮子或整体的范围有限,可能会停止工作。核心   应该没问题。

答案 4 :(得分:0)

使用Lua5.1或Lua5.2

最大格式化数字:

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368

如果最后将68更改为69,它仍然只显示68。 大于上面数字的数字将返回math.huge aka inf。

等于:1.8x10 ^ 308或者只是2 ^ 1024以南。

亲自尝试:

print(string.format("%.0f",number))

答案 5 :(得分:-1)

(lua 5.3.4)

打印时显示 'inf' 的最大数量约为 301602860200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000