Как вычислить десятичный эквивалент числа

Как вычислить десятичный эквивалент числа

Ответ

Проверено экспертом

172₈ = 1х8²+7х8¹+2х8⁰ = 64+56+2 = 122₁₀

2EA₁₆ = 2×16²+14×16¹+10×16⁰ = 512+224+10 = 746₁₀

101010₂ = 1×2⁵+0x2⁴+1×2³+0x2²+1×2¹+0x2⁰ = 32+8+2 = 42₁₀

Продолжая исследовать проблему точности десятичных вычислений средствами двоичной арифметики, начатую в предыдущих постах [1,2,3,4], мне удалось разработать алгоритмы вычисления вещественных чисел, представленных в формате десятичных чисел с плавающей точкой, которые дают такой же точный результат, как если бы вычисления велись вручную.

В этих алгоритмах использована двоичная арифметика, регламентированная стандартом IEEE754. Для проверки работы алгоритмов была разработана тестовая программа на C++, реализующая 18-ти разрядный десятичный калькулятор.
Поскольку объем материала превышает формат поста, я изложил основные моменты в виде тезисов. Назовем этот пост «Майскими тезисами»:(.

Известно, что

Привычная для пользователя арифметика, это десятичная арифметика.

Существуют также b-ичные арифметики, где b- база системы счисления, принимающая любое ненулевое значение [5].

Для отображения чисел в разных масштабах используется запись чисел с плавающей точкой в виде произведения мантиссы и некоторой произвольной степени базы. Это, так называемая, экспоненциальная запись.

Если степень числа фиксирована и мантисса числа является целым числом, то такой формат называется форматом с фиксированной точкой. Частным случаем формата с фиксированной точкой является число, в котором степень равна нулю. Такой формат является форматом целого числа.

Если мантисса представляет собой дробное число в b-ичной системе счисления с целой частью c≠0 и c , а для ЧПТ, в стандарте IEEE754, как .

Отличие СДДФ от двоично-десятичного формата (ДДФ или BCD) ЧПТ в том, что в ДДФ мантисса и экспонента представляют собой целые десятичные числа, в которых каждая цифра записана в виде байта или тетрады, в то время, как в СДДФ все десятичные числа выражаются их целыми двоичными эквивалентами.

Читайте также:  X360ce не найден указанный модуль

Таким образом, любое десятичное вещественное число можно представить в СДДФ двоичным кодом с точностью до N значащих десятичных цифр.

Все арифметические операции над десятичными ЧПТ в СДДФ проводятся по правилам обычной арифметики, где все аргументы являются целыми числами.

Перед каждой арифметической операцией десятичное число представляется в формате СДДФ:[S,M,z,e]. Где S-код знака числа (0 или 1). M — двоичный целочисленный эквивалент мантиссы числа с количеством десятичных цифр N. Где N — точность вычислений. z — знак экспоненты, e -значение экспоненты. Такое представление является нормализованным представлением десятичного числа.

Например, для вычислений с точностью до N=7 значащих цифр, число 123,456 должно быть представлено как 1234560*10^-4.

Минимальное значение десятичной мантиссы числа для N=7 будет равно M=1000000.

Максимальное значение десятичной мантиссы числа для N=7 будет равно M=9999999.

Двоичный эквивалент максимального 7-ми разрядного числа 9999999 будет равен 100 110 001 001 011 001 111 111. Он содержит 24 двоичных разряда. Следовательно, для представления десятичных мантисс в диапазоне от 1000000 до 9999999 требуется двоичный 24-разрядный регистр.

Если в 32-х разрядном двоичном машинном слове, в котором 24 разряда отвести под мантиссу, один разряд отвести под знак числа S, один разряд под знак экспоненты z, а также 6 разрядов под экспоненту, то в таком СДДФ могут быть представлены десятичные вещественные числа с точностью до N=7 значащих десятичных чисел. Абсолютные значения этих чисел лежат в диапазоне от 1000000*10^-64 до 9999999*10^64.

После каждой арифметической операции десятичная мантисса числа должна быть нормализована и округлена до ближайшего целого. Для этого полученный двоичный эквивалент мантиссы числа, при необходимости, должен быть умножен или разделен на двоичный эквивалент числа 10 в такой степени, чтобы количество цифр десятичного эквивалента мантиссы стало равно величине N. Полученное таким образом число должно быть округлено до ближайшего целого.

Читайте также:  Тысяча сердечек в вк скопировать

Найти с точностью до N=7 результат выражения (9675,423*10^2-9,675421*10^5)*10^6 — 199992
Вычисленное вручную, или на калькуляторе Windows, это выражение будет равно числу 8,000000
Запишем операнды в нормализованном виде:

A=9,675423*10^5= 9675423*10^-1
B= 9675,421*10^2 = 9675421*10^-1
C=1000000 = 1000000*10^0
D = 1999920*10^-1

В СДДФ эти операнды будут представлены как:

A=[0, 9675423,1, 1]
B=[0,9675421,1, 1]
C=[0, 1000000,0, 0]
D=[0, 1999920,1, 1]

Найдем разность S=A-B. Поскольку экспоненты операндов A и B одинаковы, найдем мантиссу их разности:

Для нормализации мантиссы S надо умножить ее на 10^6, одновременно экспоненту надо уменьшить на 6. Тогда S =2*1000000=2000000*10^-7

Вычислим произведение P=D*C. Для этого перемножим мантиссы сомножителей и сложим экспоненты:

M= 2000000*10^-7*1000000*10*0=2000000000000*10^-7
После нормализации мантиссы получим P=2000000 *10^-1.
Результат R вычисления будет равен:
R=P-D=2000000 *10^-1-1999920*10^-1=80*10^-1
После нормализации получим R = 8000000*10^-6.

Для сравнения, вычисление этого выражения в Excel дает результат R = 8,0000698E+00.

Автором разработан алгоритм калькулятора в СДДФ, осуществляющий сложение, вычитание, умножение и деление десятичных чисел с точностью до 18-ти значащих цифр. Для подтверждения правильности алгоритма была написана программа на C++. Поскольку автор не является профессиональным программистом, разработанная программа предназначена только для исследования алгоритма вычислений.

Ниже, для примера, представлен скриншот, демонстрирующий вычисление следующего выражения:

1,23456789098765432*10^8 * 9,87654321234567891*10^(-9) — 1,2193263123914037*10^0≈ 3.0*10^(-17)

Для проверки быстродействия, в цикле была запущена операция умножения двух 18-ти разрядных чисел. Программа запускалась на компьютере Intel® Core(TM) i3-4330 CPU@3.50GHz 3.50 GHz. ОЗУ 8,0 ГБ. Тип системы: 64-разрядная. Скорость получилась равной ≈ 2.4*10^6 умножений в секунду.

Сравнить с быстродействием калькуляторов Windows и Excel я пока не могу, не хватает образования:(. Что же касается точности вычислений, то она такая же, как если бы расчеты велись вручную.

В ячейке записаны следующие биты: 01110011 — это соответствует шестнадцатеричному 73.
Если число беззнаковое, то его десятичный эквивалент 115.
Если число знаковое, то, поскольку первый бит числа "0" (в байте 8 бит, под знак отводится старший) — число положительное, его значение равно 115.

Читайте также:  Лба 3923а схема электрическая принципиальная

Вот если бы в ячейке было записано шестнадцатеричное "АА", то ему бы соответствовало 10101010. Если число беззнаковое, то его десятичный эквивалент 170. Если число знаковое и записано в коде "двоичное дополнение", то, поскольку первый бит числа "1" — число отрицательное, чтобы определить его значение, инвертируем все биты (01010101), прибавляем единицу (01010110). Получили число 86. Значит, искомое число "-86".

Я примерно так понимаю

(1110011)2
Беззнаковое число для 8-и бит это: 01110011 соответственно десятичный эквивалент это 115 (обрати внимание, что ты посчитал 115 два раза, когда можно было число из 16-й системы в 2-ю перевести bit grouping-ом).

Знаковое число для 8-и бит — это снова 01110011, поскольку знаковый бит равен нулю, число положительное, переводим его в десятичный эквивалент, и получаем то что уже знали.

Теперь -115 перевожу в дополнительный код
Зачем?

Ссылка на основную публикацию
Как выйти из bios на ноутбуке asus
Пользователю это совершенно не нужно, но ноутбук упорно предлагает ему посетить БИОС, причем, это иногда может повторяться несколько раз подряд....
Как включить мобильную связь
Выход в «мировую паутину» посредством гаджетов стал обыденным делом, поэтому пользователю необходимо выяснить, как настроить Интернет на операционной системе «Андроид»....
Как включить слои в кореле
Безусловно, слои предполагают некоторые свои нюансы, требуют и определённой подготовки для успешной работы. Но достаточно немного усердия и терпения, чтобы...
Как выровнять ячейки в таблице ворде
Делать таблицы в ворде несложно, гораздо большие проблемы вызывает придание ей аккуратного внешнего вида. У неопытных пользователей чаще всего возникают...
Adblock detector