Как стать автором
Обновить

Всё, точка, приплыли! Учимся работать с числами с плавающей точкой и разрабатываем альтернативу с фиксированной точностью десятичной дроби

Время на прочтение13 мин
Количество просмотров211K
Всего голосов 29: ↑23 и ↓6+17
Комментарии13

Комментарии 13

Кстати, интересно было бы почитать про практическое использование библиотек gmp, mpir, mpfr, boost.multiprecision.
теперь используйте ваш класс для решения этой проблемы.
Интресно что получиться.
Ничего хорошего. В том соотношении очень быстро накапливается погрешность, независимо от того, какой она была изначально.
Обязательно попробую, отпишусь по результатам.
Это обычное бинарное представление целого числа, в которое нужно возвести 10, чтобы при перемножении на мантиссу в нормализованном виде получить исходное число


Как-то непоследовательно выходит. Вы сперва упоминаете, что экспонента по основанию 2. Потом вдруг всплывает эта цитата. А ещё ниже вы раскладываете 640 снова по экспоненте 2…
Там должно быть 2 конечно же.
«Поэтому для бизнес-логики, как правило, не используют C/C++, а берут C# или Python, где в стандартной библиотеке уже встроен тип Decimal»

Как-то это слишком толсто. Выбор таких разных платформ только из-за присутствия некой функциональности в стандартной библиотеке, которая, кстати, туда попадает из более низкоуровневых библиотек? Вообще подобные утверждения как-то иррелевантны теме статьи, упомянуть о наличии таких встроенных средств в высокоуровневые языки можно без излишней «рационализации».
Всё довольно просто, тема статьи касается в том числе отсутствия в стандартной библиотеке C++ типа представления вещественного числа с фиксированной точкой. В принципе если работаешь с БД с numeric/decimal типами, то преобразовывать их в типы float/double, а уж тем более держать строкой, не самое разумное решение. Поэтому для высокоуровневой работы и берут высокоуровневые языки.
Со статьей идет несколько файлов с исходниками одной из возможных реализаций decimal, а также с небольшим тестом вещественных чисел для лучшего усвоения материала.

Интересно было бы посмотреть. Только вот ссылок не нашел. и какого-то официального github для журнала тоже. Направите?
Напишите непосредственно редактору, он выкладывает тексты.
чтобы получить нормализованную мантиссу, нам нужно поделить число на 512 — максимальную степень двойки, меньшую числа, получим 640 / 512 = 512 / 512 + 128 / 512 или 1 + 1/4, что дает в двоичной записи 1,01, соответственно, в битах мантисы будет 0100000 00000000 00000000;

«А теперь нарисуем сову!»
Честное слово, вот это не язык для обучения, это больше похожу на попытку как-то объяснить свои мысли.
Первый же сайт из гугла (после таких же косноязычных википедий) объясняет куда проще и наглядней:
Представление двоичного числа с плавающей точкой в экспоненциальном нормализованном виде.
Для этого переведем число в двоичное представление.
640 = 1010000000
Сдвинем число на 9 разрядов вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа:
Мантисса M=1.0100000000
Экспонента exp=9
Чтобы не получилось рисование совы, нужно просто читать по порядку, включая предыдущий параграф.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий