Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
rar14
28 / 22 / 2
Регистрация: 14.04.2009
Сообщений: 448
1

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

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

То есть, скажем, нужно определить максимальное и минимальное значение типа long double. Как это сделать программно? В стандартной библиотеке limits.h нет константы для long double.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2009, 10:16
Ответы с готовыми решениями:

Как программно определить режим сборки в VS ?
Хотелось бы иметь что-то такое if (IsDebuggerPresent() == TRUE) std::cout <<...

Как программно определить процесс запущенный в системе
Собственно, я хочу что бы программа определяла запущен ли конкретный процесс в...

Преобразования типов. Определить тип переменной
Всем привет Недавно начал изучать язык C++ по книжке...

Определить наибольшее из 3 чисел для данных разных типов
Напишите программу, которая позволяет определить наибольшее из 3 чисел для...

Диапазоны значений перечислителей
Доброго времени суток, уважаемые форумчане! Для чего нужны диапазоны значений...

14
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
01.06.2009, 10:18 2
Посмотри в float.h
Должны быть макросы LDBL_MIN, LDBL_MAX
0
Monte-Cristo
2796 / 1383 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
01.06.2009, 10:21 3
подключаешь limits.h и там есть макросы..вот почитай

limits.h на wiki
0
rar14
28 / 22 / 2
Регистрация: 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 байт. Чем они тогда различаются?
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
01.06.2009, 10:29 5
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
подключаешь limits.h и там есть макросы..вот почитай
В limits.h записаны только диапазоны для целочисленных типов. А для плавающих - в float.h
0
rar14
28 / 22 / 2
Регистрация: 14.04.2009
Сообщений: 448
01.06.2009, 10:30  [ТС] 6
Увидел.
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
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'у
0
rar14
28 / 22 / 2
Регистрация: 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 абсолютно одинаковые в моем компиляторе.
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
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'а
0
Monte-Cristo
2796 / 1383 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
01.06.2009, 11:24 10
Цитата Сообщение от Evg Посмотреть сообщение
В limits.h записаны только диапазоны для целочисленных типов. А для плавающих - в float.h
не прочитал сообщение rar14) ответил на вопрос с названия темы)) float.h ты упомянул, я же для других базовых типов.
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
01.06.2009, 11:47 11
Да. А программно вообще можно определить диапазон значений?
Ну для int можно так: (2 в 8 степени) в степени sizeof(int). А вот как для вещественных типов не пойму.
у вещественных чисел есть две части мантисса и порядок, в универе даже заставляли переводить из двоичных и обратно вещественные числа
http://ru.wikipedia.org/wiki/Числа_с_плавающей_запятой
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
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% переносимым между различными архитектурами
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
01.06.2009, 13:09 13
Цитата Сообщение от rar14 Посмотреть сообщение
То есть, скажем, нужно определить максимальное и минимальное значение типа long double. Как это сделать программно? В стандартной библиотеке limits.h нет константы для long double.
limits.h она только для целочисленных типов, для вещественных есть float.h.

Добавлено через 1 минуту 0 секунд
Тьфу, сказали уже...
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
01.06.2009, 13:13 14
Evg, я честно даже не вчитывался, собсно общие представления что такое вещественные числа статья дает, к тому же врятли автор будет писать для спарков) хотя, не знал
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
01.06.2009, 13:31 15
Цитата Сообщение от alex_x_x Посмотреть сообщение
к тому же врятли автор будет писать для спарков
Именно по этой причине я с нулевым доверием отношусь к статьям, авторы которых даже не подозревают, что кроме intel'а в мире есть ещё и другие архитектуры
0
01.06.2009, 13:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2009, 13:31

Определить количество байтов, которые занимают в памяти переменные данных типов
Здравствуйте. Помогите пожалуйста с лабораторной... В языке С++ полный ноль,...

Для всех базовых типов определить размер в байтах
Доброе всем времени суток. задали лабораторную на си++, но проблема в том что...

Сравнение данных оболочек базовых типов
Добрый день! Потихоньку занимаюсь изучением Java и натыкаюсь на некоторые...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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