Инверсия числа в двоичном - PullRequest
2 голосов
/ 03 июля 2010

Предположим, у нас есть произвольное положительное число x.

Есть ли метод для представления его обратного в двоичном виде или обратное значение x равно 1/x - как это выразить в двоичном виде?

например. x=5 //101
Обратное значение x равно 1/x, это двоичная форма ...?

Ответы [ 6 ]

6 голосов
/ 03 июля 2010

Вы найдете его так же, как в десятичной форме: длинное деление .

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

Здесь - очень хорошее объяснение длинного деления, применяемого к двоичным числам.

ld

Хотя, просто чтобы вы знали, большинство систем с плавающей запятой на современных машинах делят для вас очень быстрое деление.

1 голос
/ 03 июля 2010

Другая форма мультипликативного обращения использует преимущества целочисленной арифметики по модулю, реализованной на большинстве компьютеров; в вашем случае 32-битное значение 11001100110011001100110011001101 (-858993459 со знаком int32 или 3435973837 без знака int32) при умножении на 5 равно 1 (мод 4294967296) Только те значения, которые взаимно просты с степенью двойки, по которой действует модуль, имеют такие мультипликативные инверсии.

1 голос
/ 03 июля 2010
0.125          = 0.001b
0.0625         = 0.0001b
0.0078125      = 0.0000001b
0.00390625     = 0.00000001b
0.00048828125  = 0.00000000001b
0.000244140625 = 0.000000000001b
----------------------------------
0.199951171875 = 0.001100110011b

Бросьте себя, если вы хотите более высокую точность / точность.

1 голос
/ 03 июля 2010

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

0 голосов
/ 03 июля 2010

Если вам просто нужны первые несколько бит двоичного числа дроби, этот трюк даст вам эти биты: (2 << 31) / x. Но не используйте этот трюк в любом реальном программном проекте. (потому что это грубый, неточный и явно неправильный способ представления значения)

0 голосов
/ 03 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...