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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 65, средняя оценка - 4.88
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
#1

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

30.03.2011, 08:08. Просмотров 10125. Ответов 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'ом? Как вариант сделать побитовое умножение на маску... Но...

40
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6911 / 3189 / 315
Регистрация: 04.12.2011
Сообщений: 8,828
Записей в блоге: 5
18.07.2015, 15:23 #31
Цитата Сообщение от taras atavin Посмотреть сообщение
Мне ваще то не нужен максимум дабла. К тому же я ведь могу и поменять тип на float, или на long double.
taras atavin, вопрос:
Цитата Сообщение от taras atavin Посмотреть сообщение
Как вернуть NaN и Infinity, проверить на NaN и Infinity?
вне контекста определённого типа не имеет смысла. А поменять-то можно. Было бы желание.
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
18.07.2015, 15:42  [ТС] #32
Цитата Сообщение от IGPIGP Посмотреть сообщение
вопрос:
Цитата Сообщение от taras atavin Посмотреть сообщение
Как вернуть NaN и Infinity, проверить на NaN и Infinity?
вне контекста определённого типа не имеет смысла.
Чем различается
C++
1
Result.x.x=std::numeric_limits<double>::quiet_NaN();
,
C++
1
Result.x.x=std::numeric_limits<float>::quiet_NaN();
и
C++
1
Result.x.x=std::numeric_limits<long double>::quiet_NaN();
?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6911 / 3189 / 315
Регистрация: 04.12.2011
Сообщений: 8,828
Записей в блоге: 5
18.07.2015, 17:44 #33
Цитата Сообщение от taras atavin Посмотреть сообщение
Чем различается
taras atavin, это константы разного типа. Наивное предположение о том что:
C++
1
2
3
const int a =1;
const float b = 1;
const double c = 1;
это один леший, это не в данный раздел. Даже в новичках скажут, что это разные вещи слева и инициализированы с приведением.
Я лично боюсь и представить что будет в double при попытке присвоить ему std::numeric_limits<float>::quiet_NaN() и стандартизованно ли это.
Повторяю вопрос (на Ваш вопрос). Вам нужно определить факт и причину аварии в расчёте или просто хочется понять как можно реализовать/реализованы данные константы в различных компиляторах?

Не по теме:

И второй вопрос, - сопутствующий. Как мы тут с Вами смотримся? Вспоминается К. Прутков: "Два голубя, как два родные брата жили... А нет ли у тебя с наливкою бутыли?"
Количество просмотров зашкаливает. И кстати. Форум не знает слова "наливкою"! Это несомненная практическая польза для форума, расширить его словарь таким полезным словом.
За сим разрешите откланяться.

0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
18.07.2015, 18:23  [ТС] #34
IGPIGP, Вы вообще риторические вопросы понимаете?

Добавлено через 1 минуту
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я лично боюсь и представить что будет в double при попытке присвоить ему std::numeric_limits<float>::quiet_NaN()
Да кто ж Вам сказал, что присваивание не соответствует декларации, в каждом случае своей?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6911 / 3189 / 315
Регистрация: 04.12.2011
Сообщений: 8,828
Записей в блоге: 5
18.07.2015, 18:51 #35
Цитата Сообщение от taras atavin Посмотреть сообщение
IGPIGP, Вы вообще риторические вопросы понимаете?
Разумеется, но не "Обо всём" же раздел.
Цитата Сообщение от taras atavin Посмотреть сообщение
Да кто ж Вам сказал, что присваивание не соответствует декларации, в каждом случае своей?
Никто не говорил. Тот пример который Вы привели под:
Цитата Сообщение от taras atavin Посмотреть сообщение
Чем различается
Говорит о том, что Вы не понимаете, что данные константы это не числа соответствующего типа, но это величины соответствующего типа по определению.
Это так же как то, что nullptr, это не нулевое значение, как когда-то было. Это указатель которого не может быть и всё.
taras atavin, в теме достаточно информации чтобы определить нештатную ситуацию и уточнить к какой категории она относится. Чем ещё помочь? Поговорить о непостижимой несообразности мирозданья?

Не по теме:

Ещё на свете много, друг Горацио, того с чем и не строит разбираться... (C)

0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
18.07.2015, 18:52  [ТС] #36
Цитата Сообщение от IGPIGP Посмотреть сообщение
Говорит о том, что Вы не понимаете, что данные константы это не числа соответствующего типа, но это величины соответствующего типа по определению.
Энто каким образом?
0
castorsky
1971 / 1074 / 79
Регистрация: 29.11.2013
Сообщений: 3,354
18.07.2015, 22:17 #37

Не по теме:

Жесть


http://www.webcitation.org/66HxLoJLV

Добавлено через 18 минут
Bash
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
28
29
30
31
32
bash-4.3~$ cat ./ololo_taras.c && gcc --std=c99 -lm ./ololo_taras.c && ./a.out 
#include <stdio.h>
#include <math.h>
 
int
main (int argc, char ** argv)
{
 
    int x = 0xFFF00000;
    float * ptr = (float*) &x;
    char * s = NULL;
 
    switch (fpclassify(*ptr)) {
        case FP_NAN: s = "NaN";
            break;
        case FP_INFINITE: s = "Inf";
            break;
        case FP_ZERO: s = "Zero";
            break;
        case FP_SUBNORMAL: s = "Too small";
            break;
        default: s = "Yeah! So fair, so good.";
    }
 
    fprintf(stdout, "%s\n", s);
 
    return 0;
}
NaN
bash-4.3~$ echo "man 3 isnan"
man 3 isnan
bash-4.3~$
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
19.07.2015, 13:12  [ТС] #38
Цитата Сообщение от castorsky Посмотреть сообщение
Жесть
И что же здесь такого специфически мягкого?
1
castorsky
19.07.2015, 13:18
  #39

Не по теме:

уровень знаний адептов плюсистов

0
Cuellius
184 / 92 / 65
Регистрация: 23.06.2015
Сообщений: 245
Завершенные тесты: 3
19.07.2015, 14:41 #40
Цитата Сообщение от taras atavin Посмотреть сообщение
Как вернуть NaN и Infinity
NaN = 0.0 / 0.0
Infinity = 1.0 / 0.0
-Infinity = -1.0 / 0.0

Цитата Сообщение от taras atavin Посмотреть сообщение
проверить на NaN и Infinity?
Есть функции std::isnan и std::isinf
Кроме того, с +бесконечностью или с -бесконечностью можно сравнить с помощью оператора ==
C NaN такое не прокатит, ибо NaN ничему не равен, даже другому NaN

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cmath>
 
int main()
{
    double infinity = 1.0 / 0.0;
    double minfinity = -1.0 / 0.0;
    double minfinity2 = -7.0 / 0.0;
    double nan = 0.0 / 0.0;
    double nan2 = 0.0 / 0.0;
    std::cout << infinity << std::endl;
    std::cout << minfinity << std::endl;
    std::cout << nan << std::endl;
    std::cout << std::isnan(infinity) << ' ' << std::isinf(infinity) << std::endl;
    std::cout << std::isnan(minfinity) << ' ' << std::isinf(minfinity) << std::endl;
    std::cout << std::isnan(nan) << ' ' << std::isinf(nan) << std::endl;
    std::cout << (infinity == minfinity2) << std::endl;
    std::cout << (infinity == (7.0 / 0.0)) << std::endl;
    std::cout << (minfinity == minfinity2) << std::endl;
    std::cout << (nan == nan2) << std::endl;
    std::cout << (infinity == nan2) << std::endl;
    return 0;
}
Для компилятора от Microsoft
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
28
#include <iostream>
#include <cmath>
 
double GetZero()
{
    return 0.0;
}
 
int main()
{
    double infinity = 1.0 / GetZero();
    double minfinity = -1.0 / GetZero();
    double minfinity2 = -7.0 / GetZero();
    double nan = 0.0 / GetZero();
    double nan2 = 0.0 / GetZero();
    std::cout << infinity << std::endl;
    std::cout << minfinity << std::endl;
    std::cout << nan << std::endl;
    std::cout << std::isnan(infinity) << ' ' << std::isinf(infinity) << std::endl;
    std::cout << std::isnan(minfinity) << ' ' << std::isinf(minfinity) << std::endl;
    std::cout << std::isnan(nan) << ' ' << std::isinf(nan) << std::endl;
    std::cout << (infinity == minfinity2) << std::endl;
    std::cout << (infinity == (7.0 / GetZero())) << std::endl;
    std::cout << (minfinity == minfinity2) << std::endl;
    std::cout << (nan == nan2) << std::endl;
    std::cout << (infinity == nan2) << std::endl;
    return 0;
}
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
19.07.2015, 14:46  [ТС] #41
Цитата Сообщение от Cuellius Посмотреть сообщение
NaN = 0.0 / 0.0
Infinity = 1.0 / 0.0
-Infinity = -1.0 / 0.0
Без явных арифметических операций.
0
19.07.2015, 14:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2015, 14:46
Привет! Вот еще темы с ответами:

Что такое 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; ...


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

Или воспользуйтесь поиском по форуму:
41
Ответ Создать тему
Опции темы

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