Lua中的数字最大值是多少?
在文档中似乎没有明确的答案。
我有兴趣增加一个变量 time
,它从程序启动以来计算秒数。如果最大值可以计算很远的未来,比如100年,那么我不介意让变量永远增加。否则,我将不得不考虑一个好的时间点,将 time
重置为0。
原文链接 https://stackoverflow.com/questions/945731
默认情况下,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 位。
虽然 tydok 关于 PiL 2.3 的参考是正确和合适的,而 Javier 的回答是实际上正确的,但我认为 Lua 中关于数字的讨论应该补充一些其他的细节。
Lua 解释器被设计为嵌入到一个应用程序中,通常作为配置和/或脚本语言。当为一个应用程序构建时,通常会配置一些功能以适应需求。
用于数字的确切数字类型可供配置。当编译为无硬件浮点数的平台(特别是在嵌入式系统或机顶盒游戏机应用程序中),而加载第三方模块并不重要时,选择整数类型而不是默认的 double
是合理的。偶尔,切换到 float
也是合理的。
但是,有些应用程序需要使用 64 位整数,或者大多数数字可以是整数,但偶尔需要浮点运算。对于这些情况,Lua 核心中有 LNUM patch。
LNUM 更改了核心,以便将数字存储为整数或浮点数,并允许对每个数字的精度进行多个可配置的选择。
因此,关于 Lua 数字的最大值的最终答案取决于编译时所选择的解释器的配置,以及您是否担心可表示的最大幅度或最大整数。即使如此,也已经进行了大量工作,使大整数与浮点表示相协调。
使用 Lua5.1 或 Lua5.2
最大格式化数字:
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
如果更改末尾的 68 为 69,它仍然只显示 68。 一个大于上面数字的数字会返回 math.huge,也就是 inf。
它等于:1.8x10^308 或者略小于 2^1024。
请自行尝试:
print(string.format("%.0f",number))
我遇到了这个问题,因为我自己也有一个非常相似的问题。我目前正在使用 LÖVE2D 进行编程,它使用基于 Lua 5.1 的 _LuaJIT_,因此没有整数。我的问题是:我是否可以使用单个变量来跟踪时间?
对于时间,除了知道哪个值最大之外,您首先应该问自己的是,所需的精度级别是多少,例如需精确到毫秒、厘米或十分之一秒(1、10或100毫秒)。或者是秒。为什么?
请注意,即使您理论上可以使用 Lua 5.1 数值限制(约为 2^1024) 将数千年相加成秒,问题在于,在经过一些非常长久的时间之后(但这都取决于您的边界,如果您正在处理天文应用程序会怎样呢?)你对不同时刻的区分会急剧下降……
>t = 2^1023
>print(t)
8.9884656743116e+307
>print(t+1) -- 让我们假设您的 delta t 为 1 秒
8.9884656743116e+307
因此,在某个时刻,甚至秒的差异也变得毫无意义。因此,我的建议是直接检查您的限制与所需的精度级别。
>a,b = 0,0.1 -- 精度为100毫秒
>while a~=b do a,b = b,b+1 end
interrupted!
我甚至没有等到找到极限,我只是中断了循环,而在不断添加 0.1 到前一个时刻的基准值 a 时,改变了基值。
>print(a/60/60/24/365) -- 检查当前年限制!
251.54387084919
因此,在 Lua 5.1 和 LuaJIT 中 使用单个变量跟踪时间绝对安全。个人而言,由于我正在编写通用框架,我更喜欢从秒开始划分较小的分数来保证最大精度。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我在 lua 用户网站上找到了这封电子邮件