Есть ли способ обнаружить NaN и -NaN? - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу сохранить номер lua в строку и правильно обработать NaN регистр.

Легко обнаружить любой NaN, x ~= x.

Тем не менее, единственный способ, который я обнаружил, это NaN или -NaN - использовать tostring(x) == 'nan'. Есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Существует более двух NaN (на самом деле, согласно IEEE-754 2^52-1 NaN).
Их tostring -единственные представления зависят от платформы.
Вот пример того, как получить три разных NaN (я использую Lua 5.3, собранную с Visual Studio):

n = string.unpack(">d", string.pack(">d", 0/0):sub(1, -2).."@")
print(0/0, -(0/0), n) -->  -1.#IND   1.#QNAN   -1.#QNAN

Итак, было бы правильнее не различать разные варианты NaN.

0 голосов
/ 11 сентября 2018

Вместо tostring(x) == 'nan', который не является переносимым, вы можете выполнить сравнение с фактическим вызовом tostring: tostring(x) == tostring(0/0) или tostring(x) == tostring(-(0/0)) в зависимости от того, что вам нужно. Если вам нужно сделать несколько сравнений, вы можете сохранить результат tostring и использовать его повторно.

...