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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 65, средняя оценка - 4.88
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Как вернуть NaN и Infinity, проверить на NaN и Infinity? - C++

30.03.2011, 08:08. Просмотров 9205. Ответов 40
Метки нет (Все метки)

Как вернуть NaN и Infinity, проверить на NaN и Infinity?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2011, 08:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вернуть NaN и Infinity, проверить на NaN и Infinity? (C++):

Проверка double на NaN и Infinity - C++
Как лучше проверить дабл на нотенамбер или бесконечность?

infinity размер - C++
Вопрос почему при заданной размерности я могу добавлять бесконечно? Оо class stack{ private: int count; int *st; public: ...

Как отловить +/-INF и NAN? - C++
Здравствуйте. Проблема в возникновении в ходе вычислений указанных в заголовке значений. Причем трагизм ситуации в том, что после начала...

Как присвоить переменной Double значение NaN? - C++
Есть переменная типа double. Как ей присвоить значение NaN?

nan - C++
подскажите что это означает ввожу данные на выходе "nan" работаю только с double, long int

Проверка на NaN (С/С++) - C++
Подскажите, пожалуйста, как проверить является ли вещественное число NaN'ом? Как вариант сделать побитовое умножение на маску... Но...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.03.2011, 08:25 #2
taras atavin, с помощью numeric_limits.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2011, 08:27  [ТС] #3
А при чём здесь int?
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.03.2011, 08:57 #4
Цитата Сообщение от taras atavin Посмотреть сообщение
А при чём здесь int?
Я что-то сказал про int?
0
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
30.03.2011, 10:34 #5
_isnan и _finite как вариант
1
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2011, 10:55  [ТС] #6
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Я что-то сказал про int?
А о каком здесь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// numeric_limits example
#include <iostream>
#include <limits>
using namespace std;
int main () {
  cout << boolalpha;
  cout << "Minimum value for int: " << numeric_limits<int>::min() << endl;
  cout << "Maximum value for int: " << numeric_limits<int>::max() << endl;
  cout << "int is signed: " << numeric_limits<int>::is_signed << endl;
  cout << "Non-sign bits in int: " << numeric_limits<int>::digits << endl;
  cout << "int has infinity: " << numeric_limits<int>::has_infinity << endl;
  return 0;
 }
типе?

Добавлено через 1 минуту
Цитата Сообщение от Vladimir. Посмотреть сообщение
_isnan и _finite как вариант
Это проверка?

Добавлено через 50 секунд
А как вернуть такие значения?
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.03.2011, 11:05 #7
Цитата Сообщение от taras atavin Посмотреть сообщение
типе?
taras atavin, в аргументе шаблона задайте нужный Вам тип.
Цитата Сообщение от taras atavin Посмотреть сообщение
А как вернуть такие значения?
taras atavin, Вы хоть пробовали почитать описание numeric_limits?
C++
1
2
double doubleNaN = std::numeric_limits<double>::quiet_NaN();
int intInfinity = std::numeric_limits<int>::infinity();
Vladimir., эти функции специфичны для MS.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2011, 11:44  [ТС] #8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Vladimir., эти функции специфичны для MS.
А мне надо универсально.

Добавлено через 1 минуту
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
taras atavin, Вы хоть пробовали почитать описание numeric_limits?
Пробовал, но понял только, что с помощью этого прибамбаса можно проверить, поддерживает ли тип int код Infinity и убедиться в обратном.
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.03.2011, 11:51 #9
taras atavin, я сейчас матерится начну.

ЧИТАТЬ ВНИМАТЕЛЬНО:
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
C++
1
2
double doubleNaN = std::numeric_limits<double>::quiet_NaN();
int intInfinity = std::numeric_limits<int>::infinity();
Цитата Сообщение от cplusplus.com
infinity() - Representation of positive infinity, if available.
quiet_NaN() - Representation of quiet (non-signaling) "Not-a-Number", if available.
signaling_NaN() - Representation of signaling "Not-a-Number", if available.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2011, 13:09  [ТС] #10
А почему бесконечность то интовая? Может
C++
1
2
double doubleNaN = std::numeric_limits<double>::quiet_NaN();
double intInfinity = std::numeric_limits<double>::infinity();
?

Добавлено через 14 минут
И проверку как сделать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
typedef double (*dp)(double);
double d(dp f, double x, double dx)
{
 double result, d,oldresult;
 for (result=std::numeric_limits<double>::quiet_NaN(), d=1.0; d!=0.0; dx/=2)
 {
  if (...)
  {
   return std::numeric_limits<double>::quiet_NaN();
  }
  if (...)
  {
   return std::numeric_limits<double>::infinity();
  }
  oldresult=result;
  result=(f(x+dx)-f(x-dx))/(2*dx);
  if (/*Как написать условие oldresult!=NaN?*/)
  {
   d=oldresult-result;
  }
  else
  {
   d=1.0;
  }
 }
 return result;
}
. Дальше, вернула эта функция std::numeric_limits<double>::quiet_NaN(), или std::numeric_limits<double>::infinity(), как написать условия для отлова в ифах этих значений?
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.03.2011, 13:10 #11
taras atavin, дошло, наконец? Вы пробуйте в следующий раз читать то, что Вам пишут и изучить информацию в которую Вас тыкают носом.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2011, 13:12  [ТС] #12
Как вернуть, я понял. А как проверить?

Добавлено через 56 секунд
Неужели
C++
1
2
3
4
if (y==std::numeric_limits<double>::quiet_NaN())
{
 ...
}
?
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.03.2011, 13:17 #13
Цитата Сообщение от taras atavin Посмотреть сообщение
Неужели
Не угадали. Числа с плавающий точкой так не сравниваются, нужно учитывать погрешность.

Подсказка: гугл знает ответ.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2011, 13:22  [ТС] #14
NaN с погрешностью? Ну и ну!
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.03.2011, 13:55 #15
Цитата Сообщение от taras atavin Посмотреть сообщение
NaN с погрешностью?
Я что-то сказал про сравнение c NaN?

Ладно... Раз Вам религия не позволяет вбить в гугле "NaN" и посмотреть первую же ссылку, то вот Вам цитата с Википедии:
Цитата Сообщение от ru.wikipedia.org
NaN не равен ни одному другому значению (даже самому себе[2]); соответственно, самый простой метод проверки результата на NaN — это сравнение полученной величины с самой собой.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2011, 13:55
Привет! Вот еще темы с ответами:

Что такое nan? - C++
Собственно вопрос: что такое nan? Допустим v=2 #include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; int main() { ...

max [NaN, число] vs max [число, NaN] - C++
объясните пожалуйста, в чем прикол? double a = numeric_limits&lt;double&gt;::quiet_NaN(); double b = 1.0; double c = max(b, a); // с =...

Nan после вычисления - C++
после вычисления значения выдает число, nan, число. как можно округлить до того значения, чтобы выдавался корректный ответ? + после...

LU - разложение (выдает NaN) - C++
Здравствуйте. Помогите исправить программу. Проблема заключается в том, что некоторые значение получаются NaN/ #include&lt;iostream.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.03.2011, 13:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru