В 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