Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454

Представления отрицательного числа типа double в памяти

02.10.2019, 20:31. Показов 2495. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Переменную
C++
1
double d1 = -312.26e-12
я проверил с помощью функции

C++
1
2
3
4
5
unsigned char *fd1 = (unsigned char *)(&d1);
cout << endl << "Double: ";
    for (int i = 0; i < sizeof(d1); i++) {
        printf("%02X ", fd1[i]);
    }
вывод :
C++
1
02 4E 07 05 56 75 F5 BD
Полученный рещультат 02 4E 07 05 56 75 F5 BD равен 1011 1101 1111 0101 0111 0101 0101 0110 0000 0101 0000 0111 0100 1110 0000 0010 в двоичной с.ч.
Для знака числа в формате двойной точности выделен 1 бит , в моем слечае это 1 (-), следущие 11 бит - порядок , в моем случае
001 1101 1111 тоесть 991в десятичное с.ч. , учитывая что порядок в даблов сдвинут на 1023 то 991-1023 = -32 порядок поего числа , и остальные 52+1 бит - мантисса , то есть моего числа мантисса равна 1.0101 0111 0101 0101 0110 0000 0101 0000 0111 0100 ,но я не понимаю почему , она должна же быть 1.0001 1011 1111 1111 1011 0010 0110 0000 1010 1000 0000 0000 , помогите пожалуйста разобраться , заранее спасибо.

Добавлено через 3 часа 10 минут
...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.10.2019, 20:31
Ответы с готовыми решениями:

представление в памяти компьютера числа типа double
Запишите на языке Pascal программу с использованием процедур (функций): определить для произвольного вещественного десятичного числа типа...

Как сгенерировать случайное число типа я double имея на входе 2 числа типа double - минимальное и максимальное
Например: public class ExtendedRandom : Random { public ExtendedRandom() : base() { ...

Определить для произвольного вещественного десятичного числа типа double его представление в памяти компьютера
Составить математическую модель, блок-схему и записать на языке Pascal программу с использованием процедур (функций) для решения следующих...

13
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
03.10.2019, 15:45  [ТС]
Хорошо, как насчет ссылки на материал по этой теме или тему с форума с похожим вопросом ? А то самому найти у меня не получается.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
03.10.2019, 17:11
Цитата Сообщение от plzvtl Посмотреть сообщение
C++
1
-312.26e-12
-312.26 * 10 ^ -12 = чему?
Посчитай увидишь, что компьютер не дурак)
0
2732 / 887 / 330
Регистрация: 10.02.2018
Сообщений: 2,095
03.10.2019, 17:32
Примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
int main()
{
    union MyDouble
    {
        double val;
 
        struct
        {
            unsigned long long m : 52;
            unsigned long long e : 11;
            unsigned long long s : 1;
        } bits;
    };
 
    MyDouble test;
    test.val = -312.26e-12;
 
    // исходное значение
    printf("src=%e\n", test.val);
 
    // по компонентам
    printf("s=%d, e=%d, m=%llu\n", (int)test.bits.s, (int)test.bits.e, test.bits.m);
    // двоичное представление мантисы
    printf("m.bin: 1.");
    unsigned long long bit = 0x8000000000000;
    while (bit > 0)
    {
        printf("%c", ((test.bits.m & bit) == 0) ? '0' : '1');
        bit >>= 1;
    }
    printf("\n");
 
    // собранное обратно из компонент
    printf("dst=%e\n", ((test.bits.s) ? -1.0 : 1.0) * (test.bits.m | 0x10000000000000) * pow(2.0, test.bits.e - 1023.0 - 52.0));
    //printf("dst=%e\n", ((test.bits.s) ? -1.0 : 1.0) * ((test.bits.e) ? (test.bits.m | 0x10000000000000) : (test.bits.m << 1)) * pow(2.0, test.bits.e - 1023.0 - 52.0));
 
    return 0;
}
Результат:
Code
1
2
3
4
src=-3.122600e-10
s=1, e=991, m=1536387195555330
m.bin: 1.0101011101010101011000000101000001110100111000000010
dst=-3.122600e-10
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
03.10.2019, 17:48  [ТС]
Azazel-San, хорошо, думаю будет -0.00000000031226.
Непомогло
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
03.10.2019, 17:58
Цитата Сообщение от plzvtl Посмотреть сообщение
хорошо, думаю будет -0.00000000031226

-312.26 * 10 ^ -12 = -3.1226e-10
C++
1
2
3
4
int main() {
    double const d = -312.26e-12;
    std::cout << d; // -3.1226e-10
}
-312.26e-12 в двоичном представлении равно
Цитата Сообщение от plzvtl Посмотреть сообщение
1011 1101 1111 0101 0111 0101 0101 0110 0000 0101 0000 0111 0100 1110 0000 0010
Пруф
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
03.10.2019, 18:03  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
Пруф
Я знаю чему равно это число в двоичной с.ч. в памяти компютера , что очевидно раз я сам и написал его двоичный код полученный в выводе, я сказал что не понимаю как получить такой код мантиссы .И получить его двоичный код я и сам могу с помощью функции которую я и привел , мне надо знать как на бумажке это сделать ручкой с другим числом ,не таким маленьким конечно .
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
03.10.2019, 18:08
Цитата Сообщение от plzvtl Посмотреть сообщение
мне надо знать как на бумажке это сделать ручкой с другим числом ,не таким большим конечно

Тогда зачем людям мозги пудрить?
Нельзя было так сразу написать?
И причем здесь С++ вообще?
Типа вы не смогли сами верно, что-то посчитать, поэтому написали об этом в разделе об С++?
В интернете полно информации о том как переводить, да даже здесь на форуме вроде было, о представлении и т.д.
Смотрите блоги пользователя evg.
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
03.10.2019, 18:21  [ТС]
Azazel-San, хорошо, у меня есть отчет по лабораторной в которой мне надо объяснить представление разных типов данных в памяти компютера. Число моего варианта и часть кода , которую я немогу понять ,я привел в первом сообщении. Реализированно на с++ потому в этой теме,разделе , объяснять с такими данными думаю немного затруднительно, потому и попросил в пример число с меньшей точностью.

Добавлено через 1 минуту
Цитата Сообщение от Azazel-San Посмотреть сообщение
В интернете полно информации
Хм,сколько тем можна завершить таким ответом ? 99.99%?

Добавлено через 2 минуты
Цитата Сообщение от Azazel-San Посмотреть сообщение
Тогда зачем людям мозги пудрить?
С самого начала
Цитата Сообщение от plzvtl Посмотреть сообщение
мантисса равна
Цитата Сообщение от plzvtl Посмотреть сообщение
но я не понимаю почему
0
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,191
03.10.2019, 18:26
Цитата Сообщение от plzvtl Посмотреть сообщение
Хорошо, как насчет ссылки на материал по этой теме
Сюда читай.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
03.10.2019, 18:33
Цитата Сообщение от plzvtl Посмотреть сообщение
хорошо, у меня есть отчет по лабораторной в которой мне надо объяснить представление разных типов данных в памяти компютера. Число моего варианта и часть кода , которую я немогу понять ,я привел в первом сообщении. Реализированно на с++ потому в этой теме,разделе , объяснять с такими данными думаю немного затруднительно, потому и попросил в пример число с меньшей точностью.
Вы назвали тему как "Представления отрицательного числа типа double в памяти", вбили ваше число в вашу програмку -312.26e-12 и получили его представление, вы сделали это сами и это верно, как уже убедились, но потом Вы попробовали перевести это число вручную и у вас не получилось, или Вы не поняли почему все именно так, верно?

Во 1х, ваша проблема не совпадает с названием темы, ее надо было назвать "помогите представить число ..."
Во 2х, вот сам процесс делание этого вручную на бумажке не имеет отношения к С++, почему? Потому, что числа, а именно числа с плавающей точкой представляются по стандарту IEEE 754, ваш ответ почему там именно так, а не иначе описан в этом документе. C++ не определяет стандарта для плавающих чисел - это implementation-defined.
Цитата Сообщение от plzvtl Посмотреть сообщение
Хм,сколько тем можна завершить таким ответом ? 99.99%?
Только одни могут найти информацию там, другие нет.
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
03.10.2019, 18:36  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
ее надо было назвать "помогите представить число ..."
Хорошо, понял + принял, сейчас создам новую тему стаким названием.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
03.10.2019, 18:52
plzvtl, для начала дочитайте до конца?
Зачем создавать? Я же дал ответ, все плавающие числа представляются согласно с стандартом IEEE 754, гуглите, открывайте, изучайте. Там есть все ответы.
Ну, а если уж создаёте, то надеюсь не в разделе С++.
0
2732 / 887 / 330
Регистрация: 10.02.2018
Сообщений: 2,095
03.10.2019, 18:54
Лучший ответ Сообщение было отмечено plzvtl как решение

Решение

plzvtl, представление чисел 0.01, 1, 10 в двоичной системе разительно отличается в последовательности битов. Нельзя отбросить 0 и преобразовать получившееся в двоичную систему. Есть алгоритм для перевода целых десятичных чисел, а для перевода десятичных дробей есть другой алгоритм.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0.03
 
m.bin: 1.1110101110000101000111101011100001010001111010111000
 
01) 0.
02) 0.0               0.03 * 2 = 0.06
03) 0.00              0.06 * 2 = 0.12
03) 0.000             0.12 * 2 = 0.24
04) 0.0000            0.24 * 2 = 0.48
05) 0.00000           0.48 * 2 = 0.96
06) 0.000001          0.96 * 2 = 1.92
07) 0.0000011         0.92 * 2 = 1.84
08) 0.00000111        0.84 * 2 = 1.68
09) 0.000001111       0.68 * 2 = 1.36
10) 0.0000011110      0.36 * 2 = 0.72
11) 0.00000111101     0.72 * 2 = 1.44
12) 0.000001111010    0.44 * 2 = 0.88
13) 0.0000011110101   0.88 * 2 = 1.76
14) 0.00000111101011  0.76 * 2 = 1.52
...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.10.2019, 18:54
Помогаю со студенческими работами здесь

Можно ли из числа типа double получить 2 числа типа int?
Если можно, то напишите пожайлуста название функции или способ.

Представление в памяти компьютера типа double
нужна помощь в представление ВПК (в памяти компютера) тип данних double например нам дано такое: double y = -4.8e1 и хочем чтоб...

В массив типа double записываю целые числа (типа int), но ошибка не вылазиет!
Вот программулька: #include &lt;iostream&gt; using namespace std; #include &lt;conio.h&gt; int main() { double arr={1,2,3,4,5}; ...

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

Запросить ввод числа типа double и вывести значение куба этого числа
Задание: Напишите программу, которая запрашивает ввод числа типа double и выво*дит значение куба этого числа. Для этого используйте...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru