質問の無関係な正当化:
Lua の呼び出しでエラーが発生しましたformat
:
-1.#IND を格納しようとする整数オーバーフロー
変数はtype(n)
実際にはであり、文字列 (つまり ) として指定number
できますが、数値ではありません。たとえば、次のようになります。format
%s
print(string.format("value=%s, type=%s", n, type(n)));
NaN
戻り値は次のとおりです。
値=-1.#IND、タイプ=数値
これを修正したいのですが、誰がこれを生成しNaN
ているのかわかりません (Lua にはデバッガーがありません)。
したがってasserts
、この断続的な値の原因を突き止めることができるまで、コード全体に多くのことをスローする必要がありNaN
ます。
しかし、私はそれをトラップする条件を見つけることができず、Lua にはありませんisnan(x)
。
質問:
-1.#IND
Luaで数値をテストするにはどうすればよいですか?
更新:
私は試した:
if (n ~= n) then
print(string.format("NaN: value=%s, type=%s", n, type(n)));
else
print(string.format("value=%s, type=%s", n, type(n)));
end;
そしてそれは印刷します
値=-1.#IND、数値
更新 2 : 念のため、何かを見逃した場合に備えて、実際のコードは次のとおりです。
if (oldValue ~= oldValue) then
print(string.format("Is NaN: labelNumber=%d, formatString=\"%s\", oldValue=%s (%s)", labelNumber or 0, formatString or "nil", oldValue or "nil", type(oldValue)));
else
print(string.format("Is not NaN: labelNumber=%d, formatString=\"%s\", oldValue=%s (%s)", labelNumber or 0, formatString or "nil", oldValue or "nil", type(oldValue)));
end;
そして、誤った値が出力されます:
NaN ではない: labelNumber=4、formatString="%d"、oldValue=-1.#IND (数値)
アップデート 3
まだこの問題を解決しようとしているのですが、現実の不条理に気づきました:
function isnan(x)
if type(x) ~= "number" then
return false; --only a number can not be a number
end;
...
end;