Преобразование не заканчивающегося двоичного числа в десятичное - PullRequest
2 голосов
/ 13 февраля 2012

Я не знаю, как преобразовать бесконечное двоичное число (дробь) в десятичное.Кто-нибудь может подсказать мне, как поступить с примером?

Ответы [ 2 ]

3 голосов
/ 22 мая 2012

если двоичное число является неопределенным целым числом, оно будет бесконечным (положительным или отрицательным). Как вы можете представить бесконечное число в десятичном виде? Я думаю, что это .

иначе, если двоичное число является числом с плавающей точкой, поздравляем. Во многих стандартах числа с плавающей запятой (например, IEEE 754) мантисса представлена ​​двоичным шаблоном, в котором старший бит имеет значение 1/2, второй бит имеет значение 1/4 и т. Д. Вы можете преобразовать его в десятичную, накапливая каждый бит один за другим слева.

Например, у вас есть неопределенный двоичный шаблон, скажем,

10111011101110111011 .......

для преобразования в десятичное число просто накапливайте их как

1 * 1/2 + 0 * 1/4 + 1 * 1/8 + 1 * 1/16 + 1 * 1/32 + 0 * 1/64 + 1 * 1/128 + 1 * 1/256 .. ......

, пока вы не получите достаточную точность.

1 голос
/ 04 января 2017

Если у вас есть «повторяющийся десятичный» в базе 2, и вы знаете, что повторяя его часть, можно преобразовать его в точный рациональное число в обозначениях p / q (где p и q - целые числа). Затем вы можете использовать деление для преобразования этого числа в обычную десятичную запись столько цифр точности, сколько вы хотите. (В некоторых случаях вы даже можете написать точное десятичное значение.)

Первый шаг - разделить двоичное число на его повторяющиеся и неповторяющиеся части. На самом деле мы хотим три вещи: неповторяющаяся часть, первое вхождение повторяющегося блока цифр, и длина повторяющегося блока цифр. Предположим, например, что число 1.0001100110011 ... (двоичное), где последний 0011 повторяется бесконечно. Мы можем разбить это следующим образом: неповторяющаяся часть равна 1,0 (двоичная), первое вхождение повторяющегося блока составляет 0,00011 (двоичный), и длина повторяющегося блока составляет четыре двоичные цифры.

Повторяющаяся часть двоичного числа представляет собой геометрический ряд и может быть оценена с использованием стандартной формулы для такой серии:

a + a * r + a * r ^ 2 + a * r ^ 3 + ... = a / (1 - r ).

Чтобы применить эту формулу к повторяющимся цифрам, значение a равно просто значение первого вхождения повторяющегося блока. Если повторяющаяся часть имеет n двоичных цифр, соотношение r в формуле равно 1/2 ^ n и 1 / (1 - r ) = (2 ^ n ) / (2 ^ n - 1).

Для примера 1.00011011011 ... (двоичный), из повторяющейся части имеем a = 0,00011 (двоичный) = 3/32 и n = 4, поэтому 1 / (1 - r ) = (2 ^ 4) / (2 ^ 4 - 1) = 16/15. Поэтому

a / (1 - r ) = (3/32) * (16/15) = 3/30 = 1/10,

который мы можем записать как 0,1 (десятичное число). Неповторяющаяся часть, конечно, равна 1 (десятичной), поэтому

1,00011011011 ... (двоичный) = 1 + 0,1 (десятичный) = 1,1 (десятичный).

В этом примере десятичное представление заканчивается и является точным. Существует много повторяющихся двоичных дробей, для которых, где нет такого десятичного представления, например,

0,01010101 ... (двоичный) = 1/3 = 0,3333 ... (десятичный).

В таких случаях вы должны либо решить округлить после некоторого числа десятичных цифр, либо найти и описать повторяющуюся последовательность десятичных цифр.

...