Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 1
Регистрация: 22.09.2012
Сообщений: 34

Double, int , long double

23.09.2012, 13:12. Показов 2909. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как вычислить диапазоны типов вручную указанных в название темы?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.09.2012, 13:12
Ответы с готовыми решениями:

Поменять местами значения бит в заданном количестве пар бит
есть задание нужно поменять местами значения бит в заданном количестве пар бит. Номера бит в парах задаются с клавиатуры. используя shot...

LONG VS DOUBLE / INT VS FLOAT
Всем доброго времени суток! Объясните пожалуйста почему при следующем коде #include <iostream> using namespace std; int...

Почему перестает работать программа при замене double на long double?
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете, запустил - все работает, но когда решил...

14
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
23.09.2012, 13:16
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <limits>
 
int main()
{
    std::cout << "Int max: " << std::numeric_limits<int>::max()
        << "\nInt min: " << std::numeric_limits<int>::min();
}
И т.д.
0
0 / 0 / 1
Регистрация: 22.09.2012
Сообщений: 34
23.09.2012, 13:34  [ТС]
Так и я могу. Читайте внимательнее. Мне надо определить без использования констант из заголовочного файла?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
23.09.2012, 13:35
Никак. Представление чисел с плавающей точкой — implementation-defined поведение. Никто не гарантирует, что там будет IEEE 754 или что-то ещё. Гарантируется, что у вас будут минимумы-максимумы и всё такое, доступные через std::numeric_limits.

Не по теме:

Если с казуистикой, то принципиально вы можете это выполнить, написав искусственный интеллект, который сделает реверс-инжиниринг битового представления floating-point-чисел.

0
0 / 0 / 1
Регистрация: 22.09.2012
Сообщений: 34
23.09.2012, 13:43  [ТС]
Вот задачка из Кернигана. Вы считает он требует невозможного?
Миниатюры
Double, int , long double  
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
23.09.2012, 13:51
ogcjm, а что подразумевает под собой вручную?

Добавлено через 7 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <limits>
 
int main()
{
    int cur = 0, next = 0;
    while (++next > cur)
        cur = next;
    std::cout << cur << std::endl;
    // Для проверки
    std::cout << std::numeric_limits<int>::max() << std::endl;
    cur = next = 0;
    while (--next < cur)
        cur = next;
    std::cout << cur << std::endl;
    // Для проверки
    std::cout << std::numeric_limits<int>::min() << std::endl;
}
1
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
23.09.2012, 14:24
Цитата Сообщение от ogcjm Посмотреть сообщение
Вот задачка из Кернигана. Вы считает он требует невозможного?
В общем случае да. Если для целых чисел ещё есть требование, чтобы они вели себя как в модулярной арифметике по модулю 2сколько битов на число, поэтому можно сделать что-то вроде
C++
1
2
3
4
int xd = 0;
for (int x = 1; xd < x; ++x, ++xd) {
  continue;
}
и ждать переполнения, то для вещественных можно только на честное слово полагаться: есть специальные значения для бесконечностей или нет (если да, то можно постепенным приближением найти супремумы/инфимумы), стандарт IEEE 754 или нет (если да, то точечным наблюдением за битами можно вычислить размеры порядка с мантиссой, а из них уже пределы).

Думаю, основная цель этого упражнения — разобраться с форматами представления чисел, а не решение любой ценой.
1
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
23.09.2012, 14:31
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Представление чисел с плавающей точкой — implementation-defined поведение. Никто не гарантирует, что там будет IEEE 754 или что-то ещё
Разве это не от CPU/FPU зависит?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
23.09.2012, 14:35
Цитата Сообщение от Kastaneda Посмотреть сообщение
Разве это не от CPU/FPU зависит?
Именно. Вот потому и implementation-defined. Только компилятор в курсе, что там за процессор и есть ли на нём вообще FPU или ему придётся выполнять все операции вручную. А он может взять и выполнять их в каком-то своём формате. Или у FPU может быть другой формат, а не IEEE 754.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
23.09.2012, 14:37
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Именно. Вот потому и implementation-defined. Только компилятор в курсе, что там за процессор и есть ли на нём вообще FPU или ему придётся выполнять все операции вручную. А он может взять и выполнять их в каком-то своём формате. Или у FPU может быть другой формат, а не IEEE 754.
А ну об этом и был вопрос. Я подумал ты имеешь ввиду реализацию компилятора.
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
23.09.2012, 14:46
Ну и это тоже. Вообще говоря.

Я про тот самый "свой формат" на экзотический случай, если каким-то чудом CPU не имеет встроенного сопроцессора и даже встроенных микрокодов/макрокоманд для работы с вещественными числами. Стандарт в таком случае принципиально не запрещает различным компиляторам (а то и различным версиям) использовать различные форматы (вручную и по-своему эмулировать плавающую точку с помощью целых чисел), так что числа будут непереносимыми на уровне битового представления. Программы-вычислители-то будут работать правильно (пока значения в допустимых пределах), но вот всевозможные определители максимальных значений по битикам, которые у одной реализации на одном месте, а у другой — на своём, сломаются.

По стандарту они и так являются побитово непереносимыми (это вкладывается в понятия implementation-defined), но это формально. Фактически же в большинстве случаев используется один и тот же стандарт представления, так что всё переносимо.

Естественно, если брать случай IEEE 754, то достаточно посмотреть на число 0.75. По его единственному биту (вот тут ещё один implementation-defined момент: может быть как один бит, так и два) определить размер мантиссы, ещё один бит на знак, остальное на порядок. Этого хватит для вычисления предельных значений. Правда, тут неявная зависимость от sizeof :)
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.09.2012, 18:00
Для целых чисел как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <limits>
 
int main()
{
    typedef unsigned wchar_t int_t; //между typedef и int_t нужно написать требуемый тип
    
    int_t max_value = 0, one = 1;
    for (int_t i = 0, tmp; !i || int_t( one << i) > tmp; ++i)
    {
        tmp = one << i;
        max_value += tmp;
    }
        
    std::cout << "min value = " << +int_t(-max_value - 1) << std::endl;
    std::cout << "max value = " << +max_value << std::endl;
    std::cout << "Reality:" << std::endl;
    std::cout << "min value = " << +std::numeric_limits< int_t >::min() << std::endl;
    std::cout << "max value = " << +std::numeric_limits< int_t >::max() << std::endl;
}
Проверял не все типы, так что в абсолютной корректности не уверен.

С вещественными сложнее - надо как-то узнавать размер их мантиссы и экспоненты.
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.10.2012, 20:37
Некропостинг, но все же.
Можно решить эту задачу и для вещественных чисел.
Для IEEE754 (код не мой)
Или даже так ;D
0
13 / 13 / 6
Регистрация: 05.12.2011
Сообщений: 84
03.10.2012, 20:46
А для целых чисел я бы так написал:
C++
1
2
unsigned uint_max(~0u);
int int_max((~0)&(~(1<<(sizeof(int)*8-1))));
0
0 / 0 / 0
Регистрация: 12.06.2009
Сообщений: 18
27.10.2012, 21:22
Советую для интересующихся обработкой вещественных чисел ознакомиться с функцией dlamch из пакета LAPACK.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.10.2012, 21:22
Помогаю со студенческими работами здесь

long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей
Здравствуйте все знают что в VC long double и double одно и тоже, да и при простой проверке это легко выясняется, но нужна информация от...

Количество знаков после запятой double, Long double
Есть число большой точности A. A=-1.768573656315270993281 742915329544712934120053405549882 337511135282776553364635382011977 ...

Вывести long double число без перевода в double
Надо вывести long double число без перевода в double. Пишу: printf(&quot;%Lf&quot;,S); и выводится неверно. Компилятор -- MinGW, та же фишка на...

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; using namespace std; double polp(double af,double...

Как написать такое явное преобразование из double в unsigned long int
как написать такое явное преобразование из double в unsigned long int??? спасибо всем кто поможет...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru