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

C++

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

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

28.11.2009, 19:31. Просмотров 1775. Ответов 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++
Всем доброго времени суток!!! Кто может подсказать, что значит &quot;Косвенная адресация&quot; к элементам массива. *(B + i) = 0; Это то?...

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

Что значит? ostream_iterator<int>(cout, " "); - C++
Что значит? ostream_iterator&lt;int&gt;(cout, &quot; &quot;));

Что значит ":" после параметров функции - C++
CSimpleString::CSimpleString(const char* p) : len(0), buff(nullptr) Что значит len(0), buff(nullptr) и как это называется ?

Что значит "распределение ресурсов микропроцесора" - C++
В курсовой роботе по деревьях на языке Си, есть пункт вконце - распределение ресурсов микропроцессора системы управления при решешнии...

Что значит ошибка "exponent has no digits"? - C++
Что значит ошибка exponent has no digits?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
2787 / 1373 / 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
2787 / 1373 / 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
2787 / 1373 / 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
2787 / 1373 / 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++
Здравствуйте, в данном коде имеется Unit(): health(10) { } и вопрос в том , а что же делает &quot;:&quot; и как им пользоваться. Исользовал раньше...

Выводит значение "f". Что это значит? - C++
вместо результата выводит &quot;f&quot;, незнаю даже как бороться. подскажите в чем причина #include &lt;stdio.h&gt; #include &lt;conio.h&gt; void main () ...

Что значит "в поле шириной 10 символов"? - C++
Объясните пожалуйста, что значит в поле с шириной в 10 символов? И почему у меня показывает число с 3 знаками после запятой? Полностью...

Что значит запись "if (b & 1)" - C++
что значит if (b &amp; 1) почему когда b = 6 не проходит? т.к. четная?

Что значит "this" в коде программы? - C++ Builder
Помогите пожалуйста разобраться что значит &quot;this&quot; в коде программы. За ранее спасибо.


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 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"?
Ответ Создать тему
Опции темы

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