在Lua语言中,#INF和#IND分别代表什么意思?

我对Lua还比较新。在测试过程中,我发现了#INF/#IND。但是,我找不到一个好的参考资料来解释它们。

什么是#INF#IND以及类似的(比如负数),如何生成和使用它们?

点赞
用户1009479
用户1009479

#INF 代表正无穷,#IND 代表 NaN。进行测试:

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

在我的 Windows 机器上会输出:

1.#INF
-1.#IND

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

inf
-nan
2013-10-01 04:05:59
用户2633423
用户2633423

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

Lua在将数字转换为字符串时没有太多作为,因为它在很大程度上依赖于底层的C库实现。事实上,Lua print的实现 调用了Lua tostring ,而后者(经过一系列其他调用之后)使用了 lua_number2str,它是用C sprintf定义的。因此,最终你会看到C实现使用的无限大和NaNs的任何表示(这可能根据编译Lua的编译器以及应用程序链接到的C运行时而有所不同)。

2013-10-01 07:09:54
用户687896
用户687896

@YuHao已经回答了提问者所实际询问的问题:+/-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
    }
    
  • NaN-1.#IND)是无法通过数值处理的东西,并且任何涉及它的操作的结果也都是Not-a-number(*)。长话短说……如果一个数字是NaN,将其与自身比较将(总是)为False。下面的函数实现了检查NaN最简单的方法:

    local function isNAN(value)
      return value ~= value
    }
    

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

2014-02-04 12:47:53