文档中似乎没有明确的答案。
我有兴趣增加一个time
自程序启动以来计算秒数的变量。如果最大值可以计算到很远的未来,比如 100 年,那么我不在乎让变量永远增加。否则我将不得不想一个好点来重置time
回 0。
在默认情况下编译时,数字是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 位。
尽管 tydok 对PiL 2.3的引用既正确又恰当,而且Javier 的回答实际上是正确的,但我认为 Lua 中对数字的讨论应该用一些其他细节来完善。
Lua 解释器被设计为嵌入到应用程序中,通常作为配置和/或脚本语言。为应用程序构建时,通常会配置其某些功能以适应。
用于数字的确切数字类型可用于配置。当为没有硬件浮点的平台编译时,加载第三方模块并不重要(特别是在嵌入式系统或机顶盒游戏控制台应用程序中),那么选择整数类型而不是默认类型是合理的double
。偶尔切换到float
也是合理的。
但是,有些应用需要 64 位整数,或者大多数数字可以是整数,但偶尔需要浮点运算。对于这些情况,Lua 核心有LNUM 补丁。
LNUM 更改了内核,以便将数字存储为整数或浮点数,并允许对每个精度进行多个可配置的选择。
所以 Lua 数的最大值问题的底线答案是它取决于编译时选择的解释器的配置,以及您是否担心可表示的最大幅度或最大整数。即便如此,已经进行了工作以使大整数与浮点表示配合得很好。
我在 lua 用户网站上找到了这封电子邮件
Lua 核心不使用 64 位数据类型,除非隐式地通过
size_t
orptrdiff_t
(在 64 位盒子上恰好是 64 位)。sizeof(浮动)== 4
sizeof(双)== 8您可以将 lua_Number 定义为双精度(默认)、浮点数或任何至少 32 位的整数。虽然有副作用,并且由于浮点数或整数的范围有限,一些扩展可能会停止工作。不过核心应该没问题。
使用 Lua5.1 或 Lua5.2
最大格式化数:
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
如果最后将 68 更改为 69,它仍然只显示 68。大于上述数字的数字返回 math.huge aka inf。
等于:1.8x10^308 或 2^1024 以南。
自己试试:
print(string.format("%.0f",number))