В Lua, что такое #INF и #IND?
Я довольно новичок в Lua. Во время тестирования я обнаружил #INF
/#IND
. Однако, я не могу найти хорошую ссылку, которая все объясняет.
каковы #INF
, #IND
и аналогичные (например, негативы) и как вы их генерируете и используете?
3 ответов
#INF
бесконечна, #IND
Нэн. Дайте ему тест:
print(1/0)
print(0/0)
вывод на моей машине Windows:
1.#INF
-1.#IND
поскольку нет стандартного представления для них в ANSI C, вы можете получить другой результат. Например:
inf
-nan
расширение @YuHao уже хороший ответ.
Lua делает мало при преобразовании числа в строку, так как он сильно зависит от базовой реализации библиотеки C. На самом деле Lua print
реализация вызывает Lua tostring
который в свою очередь (после серии других вызовов) использует lua_number2str
макрос, который определяется в терминах C sprintf
. Таким образом, в конце вы видите любое представление для бесконечностей и NaNs реализации C использование (это может варьироваться в зависимости от того, какой компилятор использовался для компиляции Lua и с какой средой выполнения C связано ваше приложение).
@YuHao уже указал, что означает + / -1.#INF (+- inf) и -1.#IND (nan), поэтому я просто добавлю, как с этим бороться (что мне просто нужно) в Lua:
- " inf " (+/- 1.#INF) - это более высокие значения чисел, которые (Lua/C) могут представлять, и язык предоставляет эту константу для вас: "математика.огромный." Таким образом, вы можете протестировать число внутри 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