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

C++

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

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

28.11.2009, 19:31. Просмотров 1814. Ответов 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 и как вышепрведённый код решает проблему?
Спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2009, 19:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что значит "isfinite"? (C++):

Что значит "средства комбинирования в языках программирования"? - C++
Доброго времени суток. Как понять вопрос &quot;средства комбинирования в языках программирования C, C++, C#&quot;? Что в целом имеется ввиду?...

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd" - C++
вот код, нужно найти 3 минимальных положительных числа в массиве. При размере массива больше 950 в конце заполнения рандомным способом...

Найти в строке последовательность символов ("abcd") и заменить ее другой ("xyz") - C++
Найти в строке последовательность символов (&quot;abcd&quot;) и заменить ее другой (&quot;xyz&quot;).

Что есть "С++" в Visual Studio? - C++
Здравствуйте! Сама форум посещаю уже давно (но не регистрировалась до данного времени). Мне стало интересно... что же такое С++ в visual...

Ошибка: invalid conversion from "int" to "SDL_RendererFlip" - C++
Скриншот приложен, Вот страница, откуда я брал этот код Подскажите что делать

О "нестабильности" или "переполнении" цикла foreach - C++
Здравствуйте, коллеги. Недавно коллега-программист сообщил мне страшную вещь: оказывается, что цикл foreach может переполниться при...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.11.2009, 20:15 #2
The isfinite() macro shall determine whether its argument has a finite value (zero, subnormal, or normal, and not infinite or NaN).
1
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 00:01 #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()
1
jsg
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 13
29.11.2009, 07:03  [ТС] #4
Это я понял (про define). Надо было задать вопрос конкретнее: что такое
val <= std::numeric_limits<double>::max() ?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 14:02 #5
Цитата Сообщение от jsg Посмотреть сообщение
val <= std::numeric_limits<double>::max() ?
val - это некоторая переменная, которая будет передаваться в макрос isfinite()

а

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

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

Т.е. фактически, проверяется условие на выход за предел типа.
1
jsg
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 13
29.11.2009, 15:14  [ТС] #6
Понятно, спасибо. А как сделать, чтобы этот макрос был определён глобально, т е чтобы не вставлять в каждый файл, где используется isfinite, вышеуказанные 5 строчек?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 15:32 #7
Вынеси его в хедер, который подключается во всех cpp файлах. Такой существует?
0
jsg
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 13
29.11.2009, 15:58  [ТС] #8
Я хотел определить его вообще для компилятора (или для системы), чтобы вне зависимости от проекта это макрос подключался. В Linux такой он определён, а у меня в Solaris нет, поэтому при компилировании многих линуксовых программ возникает ошибка. Это относится не конкретно к isfinite, а вообще к макросам. Может, нужно в конфигурационные файлы компилятора его прописать?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 16:05 #9
jsg, здесь моя компетентность иссякает. Это уже вопрос к nix-программистам. про настройки gcc я ничего не знаю
1
Evg
Эксперт CАвтор FAQ
17808 / 6014 / 388
Регистрация: 30.03.2009
Сообщений: 16,525
Записей в блоге: 26
29.11.2009, 18:37 #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 и каталоги, содержащиеся в этой переменной добавляет в пути поиска инклюдов ДО системных путей
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2009, 18:37
Привет! Вот еще темы с ответами:

CString buff = "aaa" + "bbb" - C++
Хочется одним оператором конкатенировать несколько подстрок CString buff = &quot;aaa&quot; + &quot;bbb&quot; компилятор выдает error C2110: cannot add two...

Qt Creator. Все "за" и "против" - C++
Доброго времени суток, форумчане! Сегодня задался вопросом использования такой IDE, как Qt Creator. Суть темы заключается в том, что я...

Что значит чистить код или подобное? - C++
прочитал историю cs и там когда Valve поддержала разработчика материально то он га эти средства подчистил код. и вообще много раз слышал...

Что значит длинный набор цифр и букв после Picture.Data={ ? - C++
Вот только часть этого кода Что значат эти буквы и цифры? Почему их ооооочень много? Picture.Data = { ...


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

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

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