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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
#1

Как программно определить диапазоны базовых типов? - C++

01.06.2009, 10:16. Просмотров 1525. Ответов 14
Метки нет (Все метки)

То есть, скажем, нужно определить максимальное и минимальное значение типа long double. Как это сделать программно? В стандартной библиотеке limits.h нет константы для long double.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2009, 10:16     Как программно определить диапазоны базовых типов?
Посмотрите здесь:
C++ Преобразования типов. Определить тип переменной
C++ Определить наибольшее из 3 чисел для данных разных типов
C++ Диапазоны значений перечислителей
Определить количество байтов, которые занимают в памяти переменные данных типов C++
C++ Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
C++ Использование базовых и производных классов
Ошибка в инициализации базовых классов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,678
Записей в блоге: 26
01.06.2009, 10:18     Как программно определить диапазоны базовых типов? #2
Посмотри в float.h
Должны быть макросы LDBL_MIN, LDBL_MAX
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
01.06.2009, 10:21     Как программно определить диапазоны базовых типов? #3
подключаешь limits.h и там есть макросы..вот почитай

limits.h на wiki
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
01.06.2009, 10:29  [ТС]     Как программно определить диапазоны базовых типов? #4
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
подключаешь limits.h и там есть макросы..вот почитай

limits.h на wiki
Для long double не вижу?

И еще. У меня компилятор Visual C++ 6.0 для long и int, а так же для double и long double, отводит для первых по 4 байта, а для вторых по 8 байт. Чем они тогда различаются?
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,678
Записей в блоге: 26
01.06.2009, 10:29     Как программно определить диапазоны базовых типов? #5
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
подключаешь limits.h и там есть макросы..вот почитай
В limits.h записаны только диапазоны для целочисленных типов. А для плавающих - в float.h
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
01.06.2009, 10:30  [ТС]     Как программно определить диапазоны базовых типов? #6
Увидел.
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,678
Записей в блоге: 26
01.06.2009, 10:30     Как программно определить диапазоны базовых типов? #7
Цитата Сообщение от rar14 Посмотреть сообщение
Для long double не вижу?

И еще. У меня компилятор Visual C++ 6.0 для long и int, а так же для double и long double, отводит для первых по 4 байта, а для вторых по 8 байт. Чем они тогда различаются?
"Вторые" это double и long double? Если так, то твой компилятор фактически long double не поддерживает, т.е. делает его эквивалентным double'у
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
01.06.2009, 10:45  [ТС]     Как программно определить диапазоны базовых типов? #8
То есть чем различаются 4-х байтовые int и long??? Абсолютно одинаковые диапазоны!

Добавлено через 10 минут 47 секунд
Да. А программно вообще можно определить диапазон значений?
Ну для int можно так: (2 в 8 степени) в степени sizeof(int). А вот как для вещественных типов не пойму.

Добавлено через 3 минуты 11 секунд
Кстати, константы DBL_MAX и LDBL_MAX абсолютно одинаковые в моем компиляторе.
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,678
Записей в блоге: 26
01.06.2009, 10:56     Как программно определить диапазоны базовых типов? #9
Цитата Сообщение от rar14 Посмотреть сообщение
То есть чем различаются 4-х байтовые int и long??? Абсолютно одинаковые диапазоны!
long обычно делают по размеру указателя. Т.е. на 32-битных системах размер long'а равен 4 байтам (и совпадает с int), а на 64-битных системах - 8 байт (и совпадает с long long)

Цитата Сообщение от rar14 Посмотреть сообщение
Ну для int можно так: (2 в 8 степени) в степени sizeof(int). А вот как для вещественных типов не пойму.
Для плавающего числа одного лишь размера типа недостаточно. Надо значть, сколько бит в этом типе отведено на мантиссу и сколько на экспоненту. В файле float.h есть описания этих размеров. Исходя из них можно вычислить диапазоны

Цитата Сообщение от rar14 Посмотреть сообщение
Кстати, константы DBL_MAX и LDBL_MAX абсолютно одинаковые в моем компиляторе.
Я же тебе написал, что твоя версия компилятора не поддерживает long double и трактует его как эквивалент double'а
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
01.06.2009, 11:24     Как программно определить диапазоны базовых типов? #10
Цитата Сообщение от Evg Посмотреть сообщение
В limits.h записаны только диапазоны для целочисленных типов. А для плавающих - в float.h
не прочитал сообщение rar14) ответил на вопрос с названия темы)) float.h ты упомянул, я же для других базовых типов.
alex_x_x
бжни
2446 / 1651 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
01.06.2009, 11:47     Как программно определить диапазоны базовых типов? #11
Да. А программно вообще можно определить диапазон значений?
Ну для int можно так: (2 в 8 степени) в степени sizeof(int). А вот как для вещественных типов не пойму.
у вещественных чисел есть две части мантисса и порядок, в универе даже заставляли переводить из двоичных и обратно вещественные числа
http://ru.wikipedia.org/wiki/Числа_с_плавающей_запятой
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,678
Записей в блоге: 26
01.06.2009, 12:19     Как программно определить диапазоны базовых типов? #12
Цитата Сообщение от alex_x_x Посмотреть сообщение
у вещественных чисел есть две части мантисса и порядок, в универе даже заставляли переводить из двоичных и обратно вещественные числа
http://ru.wikipedia.org/wiki/Числа_с_плавающей_запятой
Скажем так, статья не на 100% корректно написана. Стандарт IEEE-774 и вправду определяет форматы чисел одинарной и двойной точности (для нас известных как float и double). Использование float'а и double'а даст одинаковый результат на всех архитектурах (всякие сигнальные процессоры и embedded системы не учитываю - они как правило работают в других стандартах).

Но для расширенной точности в табличке они нарисовали 10-байтное значение. Скажем так, это тот формат, который используется на intel'овской архитектуре (IEEE-854). На sparc'е например, формат long double'а отличается от intel'овского - он имеет размер 16 байт и более жлинную экспоненту (точно не уверен, но и мантисса вроде бы на 1 бит длиннее). Т.е. код с использованием long double не будет являться 100% переносимым между различными архитектурами
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
01.06.2009, 13:09     Как программно определить диапазоны базовых типов? #13
Цитата Сообщение от rar14 Посмотреть сообщение
То есть, скажем, нужно определить максимальное и минимальное значение типа long double. Как это сделать программно? В стандартной библиотеке limits.h нет константы для long double.
limits.h она только для целочисленных типов, для вещественных есть float.h.

Добавлено через 1 минуту 0 секунд
Тьфу, сказали уже...
alex_x_x
бжни
2446 / 1651 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
01.06.2009, 13:13     Как программно определить диапазоны базовых типов? #14
Evg, я честно даже не вчитывался, собсно общие представления что такое вещественные числа статья дает, к тому же врятли автор будет писать для спарков) хотя, не знал
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2009, 13:31     Как программно определить диапазоны базовых типов?
Еще ссылки по теме:
Класс наследуемый от двух базовых классов C++
C++ List (STL) не пользуется конструкторами копий базовых классов
Продолжение цепочки наследования без дублей базовых классов C++
C++ Нюансы использования абстрактных базовых классов (класс Shape)
C++ Создать не менее 2-х базовых классов и класс, наследующий их поля

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,678
Записей в блоге: 26
01.06.2009, 13:31     Как программно определить диапазоны базовых типов? #15
Цитата Сообщение от alex_x_x Посмотреть сообщение
к тому же врятли автор будет писать для спарков
Именно по этой причине я с нулевым доверием отношусь к статьям, авторы которых даже не подозревают, что кроме intel'а в мире есть ещё и другие архитектуры
Yandex
Объявления
01.06.2009, 13:31     Как программно определить диапазоны базовых типов?
Ответ Создать тему
Опции темы

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