Форум программистов, компьютерный форум CyberForum.ru

Проверка на NaN (С/С++) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.83
'HelloWorld'
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 31
26.03.2011, 20:53     Проверка на NaN (С/С++) #1
Подскажите, пожалуйста, как проверить является ли вещественное число NaN'ом?

Как вариант сделать побитовое умножение на маску... Но тогда первый бит (знак) теряется.. Что делать?

Желательно без использования С++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2011, 20:53     Проверка на NaN (С/С++)
Посмотрите здесь:

nan C++
Как вернуть NaN и Infinity, проверить на NaN и Infinity? C++
LU - разложение (выдает NaN) C++
При вычисление выдает nan C++
C++ max [NaN, число] vs max [число, NaN]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
26.03.2011, 22:38     Проверка на NaN (С/С++) #2
В C99 в math.h есть isnan(x).
А так, не знаю, насколько это правильно и переносимо, но для бытовых нужд работает: NaN не равен сам себе, поэтому просто x != x.
'HelloWorld'
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 31
26.03.2011, 23:28  [ТС]     Проверка на NaN (С/С++) #3
Спасибо за ответ) Проблему решил использованием маски и побитового сравнения
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2011, 13:18     Проверка на NaN (С/С++) #4
Цитата Сообщение от Somebody Посмотреть сообщение
NaN не равен сам себе, поэтому просто x != x.
Если и бесконечность имеет это свойство, то
C++
1
2
3
4
5
6
7
8
if (x==x)
{
 /*Здесь уж точно число*/
}
esle
{
 /*Фиг его знает, то ли NaN, то ли Infinity*/
}
.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
30.03.2011, 15:23     Проверка на NaN (С/С++) #5
Вот тут есть ссылки
Как вернуть NaN и Infinity, проверить на NaN и Infinity?

Цитата Сообщение от 'HelloWorld' Посмотреть сообщение
Проблему решил использованием маски и побитового сравнения
Для того и вводятся интерфейсы, чтобы не корячиться с масками. NaN'ы бывают тихие и громкие. И вроде бы как множество способов записи NaN'а. Другое дело, что не везде интерфейсы поддержаны

Вот один из вариантов библиотечного isnan'а (в предположении, что плавающие числа представлены в стандарте ieee-754)
http://fxr.googlebit.com/source/lib/libc/gen/isnan.c
union описан здесь
http://fxr.googlebit.com/source/lib/...clude/fpmath.h
Yandex
Объявления
30.03.2011, 15:23     Проверка на NaN (С/С++)
Ответ Создать тему
Опции темы

Текущее время: 12:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru