7

我对Lua相当陌生。在测试时我发现#INF/ #IND。但是,我找不到解释它的好参考。

什么是#INF#IND和类似的(例如底片)以及如何生成和使用它们?

4

3 回答 3

11

#INF是无限的,#IND是NaN。给它一个测试:

print(1/0)
print(0/0)

我的 Windows 机器上的输出:

1.#INF
-1.#IND

由于 ANSI C 中没有这些的标准表示,您可能会得到不同的结果。例如:

inf
-nan
于 2013-10-01T04:05:59.143 回答
7

扩展@YuHao 已经是很好的答案了。

Lua 在将数字转换为字符串时几乎没有做任何事情,因为它严重依赖于底层的 C 库实现。事实上,Luaprint实现调用 Lua tostring,而 Lua(在一系列其他调用之后)使用lua_number2str,它是根据Csprintf定义的。因此,最终您会看到 C 实现使用的无穷大和 NaN 的任何表示(这可能会根据用于编译 Lua 的编译器以及您的应用程序链接到的 C 运行时而有所不同)。

于 2013-10-01T07:09:54.700 回答
5

@YuHao 已经回答了 OP 有效提出的问题:+/-1.#INF(+-inf) 和-1.#IND(nan) 是什么意思。我在这里要做的只是通过扩展来处理-检查-它们(我只是需要并学会了)来为问题/答案增加一些价值:

  • inf ( +/-1.#INF) 是 Lua 可以表示的最大数字 (+/-),并且语言通过 为您提供这样的值math.huge。所以你可以测试一个数字是否为 +/-INF:
local function isINF(value)
  return value == math.huge or value == -math.huge
end
  • nan ( -1.#IND) 是不能用数值处理的东西,任何涉及它的操作的结果也是 Not-a-number (*)。长话短说...如果一个数字是 a NaN,将其与自身进行比较将(总是)为 False。下面的函数实现了检查是否 a 的最简单方法NaN
local function isNAN(value)
  return value ~= value
end

(*):这个 (NaN) 是在 IEEE754 标准(浮点数)中的某个地方正式定义的。

于 2014-02-04T12:47:53.313 回答