在Lua中,#INF和#IND是什么?

时间:2013-10-01 03:10:49

标签: c floating-point lua floating-point-conversion

我对Lua很新。测试时我发现了#INF / #IND。但是,我找不到一个很好的参考资料来解释它。

什么是#INF#IND和类似内容(例如否定关键字)以及如何生成和使用它们?

3 个答案:

答案 0 :(得分:8)

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

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

我的Windows机器上的输出:

1.#INF
-1.#IND

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

inf
-nan

答案 1 :(得分:6)

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

Lua在将数字转换为字符串时几乎没有,因为它严重依赖于底层的C库实现。实际上,Lua print implementation调用Lua tostring,后者(在一系列其他调用之后)使用lua_number2str macroC sprintf定义为{{3}}。因此,最后您可以看到C实现使用的无穷大和NaN的任何表示形式(根据编译Lua使用哪个编译器以及应用程序链接到哪个C运行库,这可能会有所不同)。

答案 2 :(得分:2)

@YuHao已经指出了什么意思+/- 1.#INF(+ -inf)和-1。#IND(nan),所以我将添加如何处理它(我只需要)在Lua:

  • “inf”(+/- 1.#INF)是(Lua / C)可以表示的较高数字值,语言为您提供常数:“math.huge”。所以你可以在Lua里面测试一个+ -INF的数字;下面的函数“isINF()”显示了如何使用它。
  • “nan”( - 1.#IND)是一个无法用数字处理的东西:它应该是一个数字,它不是,而你用它做的任何东西都不是数字。记住,没有NaN等于其他NaN;检查NaN,如下面的函数“isNAN()”。

local function isINF(value)
  return value == math.huge or value == -math.huge
end

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