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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
jsg
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 13
#1

Что значит "isfinite"? - C++

28.11.2009, 19:31. Просмотров 1749. Ответов 9
Метки нет (Все метки)

При компилировании с помощью GCC 3.4.3 в Solaris 10 SPARC не находится функция "isfinite". Решение нашёл здесь:
http://www.nexenta.org/os/Porting_Codefixes
C++
1
2
3
4
5
#if defined(sun)
#ifndef isfinite
#define isfinite(val) (val <= std::numeric_limits<double>::max())
#endif
#endif
Что означает isfinite и как вышепрведённый код решает проблему?
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2009, 19:31     Что значит "isfinite"?
Посмотрите здесь:

C++ что значит "поставить контроль памяти"? (в динамическом массиве)
C++ Выводит значение "f". Что это значит?
Что значит "знать" какой-либо язык программирования? C++
C++ Что значит ошибка "exponent has no digits"?
Что значит "средства комбинирования в языках программирования"? C++
C++ Что значит "распределение ресурсов микропроцесора"
C++ Что значит "Косвенная адресация к элементам массива"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.11.2009, 20:15     Что значит "isfinite"? #2
The isfinite() macro shall determine whether its argument has a finite value (zero, subnormal, or normal, and not infinite or NaN).
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 00:01     Что значит "isfinite"? #3
Цитата Сообщение от jsg Посмотреть сообщение
Что означает isfinite
ну это же видно из вашего же поста:

C++
1
2
3
4
5
#if defined(sun)
#ifndef isfinite
#define isfinite(val) (val <= std::numeric_limits<double>::max())
#endif
#endif
То есть это можно трактовать так:

Если определн макрос с именем sun ( т.е. #define sun )
{
Если не объвлен макрос isfinite
{
определяем макроподставноку isfinite(val)
}
}

Вообщем, любое

isfinite(val)


заменится перед компиляцией в коде на:

val <= std::numeric_limits<double>::max()
jsg
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 13
29.11.2009, 07:03  [ТС]     Что значит "isfinite"? #4
Это я понял (про define). Надо было задать вопрос конкретнее: что такое
val <= std::numeric_limits<double>::max() ?
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 14:02     Что значит "isfinite"? #5
Цитата Сообщение от jsg Посмотреть сообщение
val <= std::numeric_limits<double>::max() ?
val - это некоторая переменная, которая будет передаваться в макрос isfinite()

а

std::numeric_limits<double>::max()

возвращает максимальное значение (верхнюю границу) типа double...

Т.е. фактически, проверяется условие на выход за предел типа.
jsg
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 13
29.11.2009, 15:14  [ТС]     Что значит "isfinite"? #6
Понятно, спасибо. А как сделать, чтобы этот макрос был определён глобально, т е чтобы не вставлять в каждый файл, где используется isfinite, вышеуказанные 5 строчек?
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 15:32     Что значит "isfinite"? #7
Вынеси его в хедер, который подключается во всех cpp файлах. Такой существует?
jsg
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 13
29.11.2009, 15:58  [ТС]     Что значит "isfinite"? #8
Я хотел определить его вообще для компилятора (или для системы), чтобы вне зависимости от проекта это макрос подключался. В Linux такой он определён, а у меня в Solaris нет, поэтому при компилировании многих линуксовых программ возникает ошибка. Это относится не конкретно к isfinite, а вообще к макросам. Может, нужно в конфигурационные файлы компилятора его прописать?
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 16:05     Что значит "isfinite"? #9
jsg, здесь моя компетентность иссякает. Это уже вопрос к nix-программистам. про настройки gcc я ничего не знаю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2009, 18:37     Что значит "isfinite"?
Еще ссылки по теме:

C++ Что значит? ostream_iterator<int>(cout, " ");
C++ Что значит ":" после параметров функции
Что значит "в поле шириной 10 символов"? C++
Что значит запись char massiv[] = "text" ? C++
C++ Builder Что значит "this" в коде программы?

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17378 / 5616 / 350
Регистрация: 30.03.2009
Сообщений: 15,374
Записей в блоге: 26
29.11.2009, 18:37     Что значит "isfinite"? #10
Цитата Сообщение от jsg Посмотреть сообщение
Я хотел определить его вообще для компилятора (или для системы), чтобы вне зависимости от проекта это макрос подключался. В Linux такой он определён, а у меня в Solaris нет, поэтому при компилировании многих линуксовых программ возникает ошибка. Это относится не конкретно к isfinite, а вообще к макросам. Может, нужно в конфигурационные файлы компилятора его прописать?
"Нормальными" средствами никак. Ненормальными можно:
- Смотришь, в каком файле на солярисе сделан этот макрос и добавляешь его в линуксовый файл с таким же именем. Т.е. правку вносить в системную часть (внутренние инклюды компилятора gcc или системные инклюды)
- Лепишь этот макрос в отдельный файл (допустим, /home/trampampam/ttt.h), и при компиляции любой программы заменяешь "gcc" на "gcc -include /home/trampampam/ttt.h". Ну или попросту где надо добавляешь опцию компилятора "-include /home/trampampam/ttt.h". По этой опции этот хижер будет подключаться ДО обработки директив #include
- Допустим, в хидер в солярисе, который содержит этот макрос, называется math.h. Создаёшь каталог (желательно, чтобы был пустой), создаёшь в нём файл math.h следующего содержания

C
1
2
3
4
5
6
7
8
9
10
#ifndef __MY_MATH_H__
#define __MY_MATH_H__
 
 /* Эта директива подключит ВТОРОЙ найденный файл math.h в путях
 * поиска. Т.е. это будет системный */
#include_next <math.h>
 
#define isfinite .....
 
#endif /* __MY_MATH_H__ */
Далее задаёшь переменную окружения CPATH и устанавливаешь её значение равным КАТАЛОГУ, куда ты свалил свой самодельный файл. При компиляции gcc проверяет переменную окружения CPATH и каталоги, содержащиеся в этой переменной добавляет в пути поиска инклюдов ДО системных путей
Yandex
Объявления
29.11.2009, 18:37     Что значит "isfinite"?
Ответ Создать тему
Опции темы

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