我对Lua相当陌生。在测试时我发现#INF
/ #IND
。但是,我找不到解释它的好参考。
什么是#INF
、#IND
和类似的(例如底片)以及如何生成和使用它们?
我对Lua相当陌生。在测试时我发现#INF
/ #IND
。但是,我找不到解释它的好参考。
什么是#INF
、#IND
和类似的(例如底片)以及如何生成和使用它们?
#INF
是无限的,#IND
是NaN。给它一个测试:
print(1/0)
print(0/0)
我的 Windows 机器上的输出:
1.#INF
-1.#IND
由于 ANSI C 中没有这些的标准表示,您可能会得到不同的结果。例如:
inf
-nan
扩展@YuHao 已经是很好的答案了。
Lua 在将数字转换为字符串时几乎没有做任何事情,因为它严重依赖于底层的 C 库实现。事实上,Luaprint
实现调用 Lua tostring
,而 Lua(在一系列其他调用之后)使用lua_number2str
宏,它是根据Csprintf
定义的。因此,最终您会看到 C 实现使用的无穷大和 NaN 的任何表示(这可能会根据用于编译 Lua 的编译器以及您的应用程序链接到的 C 运行时而有所不同)。
@YuHao 已经回答了 OP 有效提出的问题:+/-1.#INF
(+-inf) 和-1.#IND
(nan) 是什么意思。我在这里要做的只是通过扩展来处理-检查-它们(我只是需要并学会了)来为问题/答案增加一些价值:
+/-1.#INF
) 是 Lua 可以表示的最大数字 (+/-),并且语言通过 为您提供这样的值math.huge
。所以你可以测试一个数字是否为 +/-INF:local function isINF(value)
return value == math.huge or value == -math.huge
end
-1.#IND
) 是不能用数值处理的东西,任何涉及它的操作的结果也是 Not-a-number (*)。长话短说...如果一个数字是 a NaN
,将其与自身进行比较将(总是)为 False。下面的函数实现了检查是否 a 的最简单方法NaN
:local function isNAN(value)
return value ~= value
end
(*):这个 (NaN) 是在 IEEE754 标准(浮点数)中的某个地方正式定义的。