如何获取 Lua 支持的整数范围?

我想知道是否可能在 Lua 中获取最小/最大数。

例如,在 C++ 中我们有以下内容

std::numeric_limits<int>::min();
std::numeric_limits<int>::max();

Lua 中是否有类似的东西?

点赞
用户1442917
用户1442917

math.minmath.max,它们分别接受一组值并返回最小值和最大值。(我意识到我可能误解了问题,它是关于整数限制而不是比较。)有math.minintegermath.maxinteger,它们返回“具有整数的最小/最大值”。

2018-08-03 04:42:38
用户1944004
用户1944004

正如其他答案所解释的那样,这个功能在标准 Lua 中不是开箱即用的。但是,很容易使用自己的 Lua-C 模块实现此功能。

test.cpp

#include <limits>
#include <lua.hpp>

static const luaL_Reg limits_lib[] = {
    {nullptr, nullptr} // 哨兵
};

LUAMOD_API int luaopen_limits(lua_State *L) {
    luaL_newlib(L, limits_lib);
    lua_pushnumber(L, std::numeric_limits<lua_Number>::max());
    lua_setfield(L, -2, "maxnumber");
    lua_pushnumber(L, std::numeric_limits<lua_Number>::min());
    lua_setfield(L, -2, "minnumber");
    return 1;
}

test.lua

local limits = require("limits")
print(limits.maxnumber)
print(limits.minnumber)

示例调用:

$ clang++ -Wall -Wextra -Wpedantic -I /usr/include/lua5.2 -shared -fPIC test.cpp -o limits.so -llua5.2
$ lua5.2 test.lua
1.7976931348623e+308
2.2250738585072e-308
2018-08-03 06:16:12
用户107090
用户107090

在 Lua 5.3 版本之前,默认情况下所有数字都是双精度浮点型,因此可以表示高达 2^52 的整数。

2018-08-03 20:46:56