Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/154: Рейтинг темы: голосов - 154, средняя оценка - 4.60
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

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

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

Как вернуть NaN и Infinity, проверить на NaN и Infinity?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2011, 08:08
Ответы с готовыми решениями:

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

Как определить NAN INFINITY HUGE_VAL?
пробую собрать libxml2-2.9.8 старым компилятором (cl v 13.10.4035 for 80x86 из DDK) там в xpath.c такие строки #ifndef NAN #define...

Null,undefined,Nan,infinity
Всем привет! У меня 2 вопроса: 1)Перечисленные в заголовке значения яв-ся ли типами данных 2)В чем разница между undefined и null ...

40
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
18.07.2015, 12:01
taras atavin,
http://en.cppreference.com/w/c... fpclassify
В секции See Also тоже посмотри.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.07.2015, 12:09  [ТС]
const char* show_classification(double x)
И что я потом с этим указателем на char буду делать? Ещё функцию, возвращающую сэмпл с голосовым сообщением предложите.

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

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
C:\Projects\Test10\Test10\Test.cpp|7|err or: 'isfinite' is not a member of 'std'|
Должен быть включен хедер cmath и поддержка С++11.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.07.2015, 12:16  [ТС]
Цитата Сообщение от ct0r Посмотреть сообщение
Уж простите, но если такое не доходит, пора на пенсию и внуков няньчить.
Может если доходит? Потому что ничего он не иллюстрирует.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
18.07.2015, 15:06
Цитата Сообщение от taras atavin Посмотреть сообщение
можно сравнивать?
Сравнивать что? Их же, - нельзя. То есть вообще можно всё, но результат будет нелогичный. Вещь сама себе неравна может быть? Легко.
taras atavin, ведь в примере показано как пошагово определить NAN, далее бесконечность и её знак. Чего же ещё желать? У Вас задача определить или понять, что можно сравнивать?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.07.2015, 15:08  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
taras atavin, ведь в примере показано как пошагово определить NAN, далее бесконечность и её знак. Чего же ещё желать?
Лишняя сущность.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
18.07.2015, 15:12
Цитата Сообщение от taras atavin Посмотреть сообщение
Лишняя сущность.
Боюсь догадаться о чём это Вы сейчас. Ниже перечислены темы про изнанку С++. Там изнан на изнане на все вкусы. Присмотрите что-нибудь не лишнее.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.07.2015, 15:13  [ТС]
О дабломаксе конечно.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
18.07.2015, 15:17
Цитата Сообщение от taras atavin Посмотреть сообщение
О дабломаксе конечно.
Это Вы сгоряча.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.07.2015, 15:20  [ТС]
Разве? Мне ваще то не нужен максимум дабла. К тому же я ведь могу и поменять тип на float, или на long double. Вот представьте себе: есть некая интовая переменная, надо проверить, равна ли она единице. Вы как проверять будете?
C++
1
if ((x>0)&&(x<2))
?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
18.07.2015, 15:23
Цитата Сообщение от taras atavin Посмотреть сообщение
Мне ваще то не нужен максимум дабла. К тому же я ведь могу и поменять тип на float, или на long double.
taras atavin, вопрос:
Цитата Сообщение от taras atavin Посмотреть сообщение
Как вернуть NaN и Infinity, проверить на NaN и Infinity?
вне контекста определённого типа не имеет смысла. А поменять-то можно. Было бы желание.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.07.2015, 15:42  [ТС]
Цитата Сообщение от 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
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
18.07.2015, 17:44
Цитата Сообщение от 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() и стандартизованно ли это.
Повторяю вопрос (на Ваш вопрос). Вам нужно определить факт и причину аварии в расчёте или просто хочется понять как можно реализовать/реализованы данные константы в различных компиляторах?

Не по теме:

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

0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.07.2015, 18:23  [ТС]
IGPIGP, Вы вообще риторические вопросы понимаете?

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

Не по теме:

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

0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.07.2015, 18:52  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Говорит о том, что Вы не понимаете, что данные константы это не числа соответствующего типа, но это величины соответствующего типа по определению.
Энто каким образом?
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
18.07.2015, 22:17

Не по теме:

Жесть


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
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.07.2015, 13:12  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
Жесть
И что же здесь такого специфически мягкого?
1
19.07.2015, 13:18

Не по теме:

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

0
193 / 100 / 131
Регистрация: 23.06.2015
Сообщений: 249
19.07.2015, 14:41
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.07.2015, 14:41

Обработка исключений при NaN, Infinity, by zero
Здравствуйте! Подскажите, пожалуйста, как сделать обработку исключений при этих значениях. Типа: try { num = num/2;//если эта...

Ошибка -nan(ind) и nan
Доброго времени суток форумчане! Решаю задачу, в которой необходимо найти площадь треугольника по координатам его вершин. Все значения не...

Как можно убрать Infinity?
package zad7; public class main { public static void main(String args) { double z, p = 0, x, y, t, ...

Как реализована Double.NaN != Double.NaN
public static void main(String args) { Float f1 = new Float(Float.NaN); Float f2 = new Float(Float.NaN); ...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru