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

C++

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

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

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

Как вернуть NaN и Infinity, проверить на NaN и Infinity?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2011, 08:08     Как вернуть NaN и Infinity, проверить на NaN и Infinity?
Посмотрите здесь:

nan C++
C++ Проверка на NaN (С/С++)
C++ infinity размер
LU - разложение (выдает NaN) C++
При вычисление выдает nan C++
C++ max [NaN, число] vs max [число, NaN]
C++ Что такое nan?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ct0r
Игогошка!
1754 / 656 / 42
Регистрация: 19.08.2012
Сообщений: 1,252
Завершенные тесты: 1
18.07.2015, 12:01     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #21
taras atavin,
http://en.cppreference.com/w/cpp/num...ath/fpclassify
В секции See Also тоже посмотри.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.07.2015, 12:09  [ТС]     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #22
const char* show_classification(double x)
И что я потом с этим указателем на char буду делать? Ещё функцию, возвращающую сэмпл с голосовым сообщением предложите.

Добавлено через 1 минуту
Цитата Сообщение от ct0r Посмотреть сообщение
В секции See Also тоже посмотри.
C:\Projects\Test10\Test10\Test.cpp|7|error: 'isfinite' is not a member of 'std'|
ct0r
Игогошка!
1754 / 656 / 42
Регистрация: 19.08.2012
Сообщений: 1,252
Завершенные тесты: 1
18.07.2015, 12:13     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #23
Цитата Сообщение от taras atavin Посмотреть сообщение
И что я потом с этим указателем на char буду делать? Ещё функцию, возвращающую сэмпл с голосовым сообщением предложите.
Алё, функция это fpclassify, а show_classification это иллюстративный пример ее применения. Уж простите, но если такое не доходит, пора на пенсию и внуков няньчить.

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
C:\Projects\Test10\Test10\Test.cpp|7|error: 'isfinite' is not a member of 'std'|
Должен быть включен хедер cmath и поддержка С++11.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.07.2015, 12:16  [ТС]     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #24
Цитата Сообщение от ct0r Посмотреть сообщение
Уж простите, но если такое не доходит, пора на пенсию и внуков няньчить.
Может если доходит? Потому что ничего он не иллюстрирует.
IGPIGP
Комп_Оратор)
6363 / 3010 / 297
Регистрация: 04.12.2011
Сообщений: 8,102
Записей в блоге: 3
18.07.2015, 15:06     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #25
Цитата Сообщение от taras atavin Посмотреть сообщение
можно сравнивать?
Сравнивать что? Их же, - нельзя. То есть вообще можно всё, но результат будет нелогичный. Вещь сама себе неравна может быть? Легко.
taras atavin, ведь в примере показано как пошагово определить NAN, далее бесконечность и её знак. Чего же ещё желать? У Вас задача определить или понять, что можно сравнивать?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.07.2015, 15:08  [ТС]     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #26
Цитата Сообщение от IGPIGP Посмотреть сообщение
taras atavin, ведь в примере показано как пошагово определить NAN, далее бесконечность и её знак. Чего же ещё желать?
Лишняя сущность.
IGPIGP
Комп_Оратор)
6363 / 3010 / 297
Регистрация: 04.12.2011
Сообщений: 8,102
Записей в блоге: 3
18.07.2015, 15:12     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #27
Цитата Сообщение от taras atavin Посмотреть сообщение
Лишняя сущность.
Боюсь догадаться о чём это Вы сейчас. Ниже перечислены темы про изнанку С++. Там изнан на изнане на все вкусы. Присмотрите что-нибудь не лишнее.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.07.2015, 15:13  [ТС]     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #28
О дабломаксе конечно.
IGPIGP
Комп_Оратор)
6363 / 3010 / 297
Регистрация: 04.12.2011
Сообщений: 8,102
Записей в блоге: 3
18.07.2015, 15:17     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #29
Цитата Сообщение от taras atavin Посмотреть сообщение
О дабломаксе конечно.
Это Вы сгоряча.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.07.2015, 15:20  [ТС]     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #30
Разве? Мне ваще то не нужен максимум дабла. К тому же я ведь могу и поменять тип на float, или на long double. Вот представьте себе: есть некая интовая переменная, надо проверить, равна ли она единице. Вы как проверять будете?
C++
1
if ((x>0)&&(x<2))
?
IGPIGP
Комп_Оратор)
6363 / 3010 / 297
Регистрация: 04.12.2011
Сообщений: 8,102
Записей в блоге: 3
18.07.2015, 15:23     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #31
Цитата Сообщение от taras atavin Посмотреть сообщение
Мне ваще то не нужен максимум дабла. К тому же я ведь могу и поменять тип на float, или на long double.
taras atavin, вопрос:
Цитата Сообщение от taras atavin Посмотреть сообщение
Как вернуть NaN и Infinity, проверить на NaN и Infinity?
вне контекста определённого типа не имеет смысла. А поменять-то можно. Было бы желание.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.07.2015, 15:42  [ТС]     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #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();
?
IGPIGP
Комп_Оратор)
6363 / 3010 / 297
Регистрация: 04.12.2011
Сообщений: 8,102
Записей в блоге: 3
18.07.2015, 17:44     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #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() и стандартизованно ли это.
Повторяю вопрос (на Ваш вопрос). Вам нужно определить факт и причину аварии в расчёте или просто хочется понять как можно реализовать/реализованы данные константы в различных компиляторах?

Не по теме:

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

taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.07.2015, 18:23  [ТС]     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #34
IGPIGP, Вы вообще риторические вопросы понимаете?

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

Не по теме:

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

taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.07.2015, 18:52  [ТС]     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #36
Цитата Сообщение от IGPIGP Посмотреть сообщение
Говорит о том, что Вы не понимаете, что данные константы это не числа соответствующего типа, но это величины соответствующего типа по определению.
Энто каким образом?
castorsky
1949 / 1039 / 78
Регистрация: 29.11.2013
Сообщений: 3,262
18.07.2015, 22:17     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #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~$
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.07.2015, 13:12  [ТС]     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #38
Цитата Сообщение от castorsky Посмотреть сообщение
Жесть
И что же здесь такого специфически мягкого?
castorsky
19.07.2015, 13:18
  #39

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2015, 14:41     Как вернуть NaN и Infinity, проверить на NaN и Infinity?
Еще ссылки по теме:

C++ Проверка double на NaN и Infinity
Как присвоить переменной Double значение NaN? C++
Вывод nan при расчете C++
C++ Интегрирования трапециями. Ошибка -nan(ind)
C++ Nan после вычисления

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

Или воспользуйтесь поиском по форуму:
Cuellius
176 / 84 / 62
Регистрация: 23.06.2015
Сообщений: 219
Завершенные тесты: 2
19.07.2015, 14:41     Как вернуть NaN и Infinity, проверить на NaN и Infinity? #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;
}
Yandex
Объявления
19.07.2015, 14:41     Как вернуть NaN и Infinity, проверить на NaN и Infinity?
Ответ Создать тему
Опции темы

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