Как проверить, что число не нан?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

02 апр 2017, 11:11

Адекватно ли сравнение с

Код: Выделить всё

std::numeric_limits<double>::quiet_NaN()
?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

02 апр 2017, 13:33

Эх, с гуглом так и не подружился. Вот гляди. Там расписаны все типы, для которых специализирован шаблон numeric_limits и показано, что вернёт его метод quiet_NaN(). Если тебя устраивает этот список типов, значит используй. Не устраивает - не используй.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Skwoogey
Сообщения: 63
Зарегистрирован: 11 янв 2016, 02:25

02 апр 2017, 14:42

а это не пойдет?
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

02 апр 2017, 15:38

Ему же, вроде, нужно статическая проверка для типа. Или я неправильно понял? Шаблон же использовать хотел...
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

02 апр 2017, 16:16

Romeo писал(а):Эх, с гуглом так и не подружился. Вот гляди.
И? К тому же эта страница мне знакома года с 2008-го. И так и не смог понять, кому она вообще может быть нужна, да и сам has_quiet_NaN тоже.
Romeo писал(а):Там расписаны все типы, для которых специализирован шаблон numeric_limits и показано, что вернёт его метод quiet_NaN(). Если тебя устраивает этот список типов, значит используй. Не устраивает - не используй.
Ога. Цитата оттуда:
returns a quiet NaN value of the given floating-point type
. То есть возвращает тихий nan. Какое это имеет отношение к проверке конкретного значения конкретной переменной?
Skwoogey писал(а):а это не пойдет?
Подойдёт .
Romeo писал(а):Ему же, вроде, нужно статическая проверка для типа. Или я неправильно понял? Шаблон же использовать хотел...
И?

Код: Выделить всё

if (Count==std::numeric_limits<size_t>::max())
тоже юзает шаблон, но к проверке типа как то не относится. Наоборот RTTI как раз закономерно не шаблонный. И если бы меня интересовал сам факт поддержки nan, так я его знаю с прошлого века, точнее с ноября 1995-го и ни когда ни кого не спрашивал, какие типы его поддерживают, а какие нет. И уж конечно с этой целью мне гуглить не надо. Только проверить это ну ник как не помогает.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Skwoogey
Сообщения: 63
Зарегистрирован: 11 янв 2016, 02:25

02 апр 2017, 16:31

Ура! Я полезный!
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

02 апр 2017, 18:32

Сионист писал(а):И? К тому же эта страница мне знакома года с 2008-го. И так и не смог понять, кому она вообще может быть нужна, да и сам has_quiet_NaN тоже.
Грустно, что столько знал о существовании этой страницы и до сих пор не понял, зачем это...
Сионист писал(а):Ога. Цитата оттуда: . То есть возвращает тихий nan. Какое это имеет отношение к проверке конкретного значения конкретной переменной?
А теперь возьми и перечитай заново своё первое сообщение в этом теме. Где вопрос о значении? Ты спросил лишь о том, можно ли использовать этот метод для проверки. Ответ: да можно. Статически.
Сионист писал(а):То есть возвращает тихий nan. Какое это имеет отношение к проверке конкретного значения конкретной переменной?
Снова... ты не спросил про значение.
Сионист писал(а):И?

Код: Выделить всё

if (Count==std::numeric_limits<size_t>::max())
тоже юзает шаблон, но к проверке типа как то не относится. Наоборот RTTI как раз закономерно не шаблонный. И если бы меня интересовал сам факт поддержки nan, так я его знаю с прошлого века, точнее с ноября 1995-го и ни когда ни кого не спрашивал, какие типы его поддерживают, а какие нет. И уж конечно с этой целью мне гуглить не надо. Только проверить это ну ник как не помогает.
Как только ты увидишь разницу между статической проверкой и runtime проверкой, у тебя всё сразу станет на свои места.

И, кстати, твой пример неуместен. Статическое значение можно использовать в runtime проверке (как это сделано в твоём примере), а вот runtime значение в статической проверке использовать нельзя.

Подведём итог. Если тебе нужна проверка значения, то вариант, предложенный Skwoogey - это как раз то, что нужно.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

02 апр 2017, 18:45

Romeo писал(а):А теперь возьми и перечитай заново своё первое сообщение в этом теме. Где вопрос о значении?
Ну вот же:
Как проверить, что число не нан?
Где хоть слово о типе и поддержке?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Skwoogey
Сообщения: 63
Зарегистрирован: 11 янв 2016, 02:25

02 апр 2017, 18:46

А можно слегка приоткрыть завесу слов "Статическая и runtime проверки", пожалуйста? Хочется немного в тему войти.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

02 апр 2017, 18:47

Romeo писал(а):Как только ты увидишь разницу между статической проверкой и runtime проверкой, у тебя всё сразу станет на свои места.
Ну эту то разницу я знаю с 2001-го. С тех пор, как узнал о самом существовании RTTI. Не в отличие ли от Вас? По крайней мере статическую проверку значений смогли сморозить лишь Вы.
Romeo писал(а):Грустно, что столько знал о существовании этой страницы и до сих пор не понял, зачем это...
И что в этом грустного?
Romeo писал(а):а вот runtime значение в статической проверке использовать нельзя.
Смотрика ты, знает. Вот только зачем его статически проверять?
Romeo писал(а):Подведём итог. Если тебе нужна проверка значения, то вариант, предложенный Skwoogey - это как раз то, что нужно.
Об этом уже сказано в отзыве на его пост и в моём ответе на тот же пост.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить