Форум программистов, компьютерный форум, киберфорум
Информатика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 298

Подскажите, где ошибка?

02.04.2021, 18:19. Показов 818. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ииии встречайте! с вами снова я! уверенно пробиваю очередное донышко ))
Какое дно пробиваю? 0,1 + 0,2 != 0,3

Имеем:
Я(уровень дно) самоучка, 0,1 + 0,2 != 0,3

Что хочу:
1. Сложить побитово.
2. Понять почему не равно.
3. Как обойти.

Что делал:
Читал статьи, что-то понял, что-то нет, все статьи из разряда "да это легко" в итоге в каком-то моменте что-то делают что им понятно но не мне, читателю. "Такие себе" объесняторы.
Описание что делал сделано по картинке, которую приложил в самом внизу.
1. перевожу из десятичной системы в бинарную, далее перевожу в нормализованный вид с основанием 2 и степенью -4;
1.2. Затем получаю степень со смещением, т.к. рассматривается 64-битная система то +1023, затем полученное числа в десятичной системе перевожу в бинарную.
1.3. Записываю в разрядную сетку: в 63й бит ставлю 0 т.к. число положительное, далее заполняю степень со смещением начиная с бита 52 и до 61-го, в 62й ставлю 0 т.к. заполняю/дополняю.
1.4. Заполняю мантиссу, при этом значение 1 перед запятой никуда не ставлю т.к. она всегда есть в нормализованном виде.
2. То же самое проделываю с числом 0,2.
3. Далее побитово пытаюсь сложить:
Начинаю с бита 35 и иду до бита 51, далее у меня нехват знаний: в 51м бите получается 10, ноль пишу а 1 куда девается?

Пожелания:
Статьи на хабре не предлагать.

Вопросы:
1. Подскажите где ошибка?
2. Как обойти 0,1 + 0,2 != 0,3? (вопрос задал наперед)
Миниатюры
Подскажите, где ошибка?  
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2021, 18:19
Ответы с готовыми решениями:

Препод говорит где - то ошибка в синтаксисе. Сам код взят из "жефри Рихтер - Создание эффективных WIN32 приложений" Пожалуйста, подскажите где ошибка!
// получаем код ошибки DWORD dwError = GetDlgItemInt(hwnd, IDC_ERRORCODE, NULL, FALSE); HLOCAL hlocal = NULL; // буфер для строки с...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил)
написать универсальный тип, который представляет точку на плоскости в координатах (х, у) и в полярных координатах. Написать функцию для...

Подскажите ,где ошибка в php? В какой-то строке ошибка
Здравствуйте. На вордпресс нашёл плагин на форуме.Тема закрыта,спросить не у кого. Пишут рабочий. Плагин оплаты...

4
90 / 109 / 15
Регистрация: 26.01.2014
Сообщений: 710
02.04.2021, 19:37
Все, что перечислил делал вручную? Заставь то же самое делать транслятор, и на каждом его шаге смотри что он сделал. Наверное можно отладчиком. Сравни с ручными преобразованиями. Не забудь рассказать здесь, что вышло. Сам с таким не сталкивался, но это занятно. Ваш Etien.
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
04.04.2021, 05:31
Palich,
IEEE-74 32-разрядное представление чисел
число 0,1 находится между 0x3dcccccc и 0x3dcccccd
0x3dcccccс=0,0999999940395 Ошибка=―5,9605*10-9
0x3dcccccd=0.100000001490116119384765625 Ошибка=+1.490116119384765625*10-9
число 0,2 находится между 0x3e4ccccc и 0x3e4ccccd
0x3e4ccccc=0,199999988079071044921875 Ошибка=―1,1920928955078125*10-8
0x3e4ccccd=0.20000000298023223876953125 Ошибка=+2.98023223876953125*10-9
беру числа с наименьшей ошибкой, складываю на калькуляторе и перевожу результат в 32-разрядное представление по стандарту IEEE-74
0,100000001490116119384765625 + 0,20000000298023223876953125 = 0,300000004470348358154296875 = 0x3e99999a
расхождение с числом 0,3 +4,470348358154296875*10-9
теперь беру число 0,3 и перевожу его по стандарту IEEE-74 в 32-разрядное представление
0.3=0x3e99999a=0.30000001192092895507812 5 Ошибка=+1.1920928955078125*10-8
32-разрядное представление числа 0,3 совпадает с тем, которое получили в результате сложения 0,1 + 0,2
Выводы:
  1. складываешь неточное представление чисел ― получаешь неточное представление результата
  2. ошибка в миллиардных долях ― так что для студенческих вычислений сойдет
  3. так как ТС
    Цитата Сообщение от Palich Посмотреть сообщение
    уровень дно
    поэтому статьи на хабре предлагать не буду ― не в коня корм
0
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 298
04.04.2021, 23:38  [ТС]
голова кипит, не могу найти толковое объяснение, я уже понял что нужно сначала выровнять порядки, но вот не могу понять: как в примере ниже получили разность 3 ? как они/она/он/оно получили 3 ?
Миниатюры
Подскажите, где ошибка?  
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
05.04.2021, 17:39
0,1=1.600000023841858*2-4
0,2=1.600000023841858*2-3
0,1+0,2=1,600000023841858*2-4+1,600000023841858*2-3=
=1,600000023841858*2-4+3,200000047683716*2-4=
=(1,600000023841858+3,200000047683716)*2-4=4,800000071525574*2-4=
=1,2000000178813935*2-2=0,300000004470348375
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2021, 17:39
Помогаю со студенческими работами здесь

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

не подскажите где ошибка ?
писал прогу для того чтобы: Удалить из него каждую строку, содержащую нулевой элемент. ВОТ ПРОГРАММА, ГДЕ ЗДЕСЬ ОШИБКА Private...

Подскажите где ошибка?
Добрый вечер. Написал программу для рекурсивного вычисления a(a+1)...(a+n+1), если a и n вводится с клавиатуры. Считает, но чушь....

подскажите где ошибка
Добрый день. Подскажите пожалуйста где ошибка. когда вводишь любое число програама выводит результат, но при попытке ввести 0 выдает ошибку...

Подскажите где ошибка
Выдаёт ошибку при компиляции #include <fstream> #include <vector> #include <iostream> using namespace std; class Toy { ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru