1/10(decimal) = 0.0001100110011... (binary)
Как мне это сделать? Должен ли я преобразовать в двоичный код, а затем разделить? Может ли кто-нибудь показать мне?
1/10(decimal) = 0.0001100110011... (binary)
Как мне это сделать? Должен ли я преобразовать в двоичный код, а затем разделить? Может ли кто-нибудь показать мне?
В университете я узнал это так:
Пример:
0.1 * 2 = 0.2 -> 0
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
Result: 0.00011(0011) periodic.
1 1 -- (dec) = ---- (bin) 10 1010 0.000110011... ------------- 1010 | 1.0000000000 1010 ------ 01100 1010 ----- 0010000 1010 ----- 01100 1010 ----- 0010
Это может быть несколько запутанным, но десятичные позиции в двоичном представлении будут представлять собой обратные силы двух (например, 1/2, 1/4, 1/8, 1/16, для первого, второго, третьего и четвертого десятичное место, соответственно), так же как и в десятичной, десятичные числа представляют собой обратные последовательные степени в десять.
Чтобы ответить на ваш вопрос, вам нужно будет выяснить, какие взаимные полномочия двух должны быть добавлены, чтобы добавить до 1/10. Например:
1/16 + 1/32 = 0,09375, что довольно близко к 1/10. Добавление 1/64 ставит нас, как и 1/128. Но, 1/256 приближает нас. Итак:
0.00011001 двоичный = 0.09765625 десятичный, что близко к тому, что вы просили.
Вы можете продолжать добавлять все больше цифр, поэтому ответ будет 0.00011001...
Вот как можно думать о методе.
Каждый раз, когда вы умножаетесь на 2, вы меняете двоичное представление числа, оставшегося на 1 место. Вы переместили самую высокую цифру после точки на 1-е место, поэтому снимите эту цифру, и это первая (самая высокая, поэтому самая левая) цифра вашей фракции. Сделайте это снова, и у вас будет следующая цифра.
Преобразование базы целого числа путем деления и принятия остатка, поскольку следующая цифра сдвигает число вправо. Вот почему вы получаете цифры в обратном порядке, сначала самые низкие.
Это, очевидно, обобщается на любую базу, а не только на 2, как указано GoofyBall.
Еще одна вещь, о которой нужно подумать: если вы округлите до N цифр, остановитесь на N + 1 цифрах. Если цифра # N + 1 является одной, вам нужно округлить (так как цифры в двоичном формате могут быть только 0 или 1, обрезая следующую цифру, а 1 является такой же неточной, как и усечение 5 в десятичной).
Понадобился время, чтобы понять ответ @Femaref (s), поэтому я подумал, что буду подробно разбираться.
Elboration
Вы хотите преобразовать десятичный 1/10
, который равен 0.1
двоичному. Начните с 0.1
в качестве вашего ввода и выполните следующие действия:
В этом случае это:
0.00011(0011) Note: numbers within parenthesis will keep repeating (periodic)
+-------+-------+--------+---------+----------+--------+----------------------+
| input | mult | answer | decimal | fraction | binary | |
+-------+-------+--------+---------+----------+--------+----------------------+
| 0.1 | 2 | 0.2 | 0 | .2 | 0 | |
| 0.2 | 2 | 0.4 | 0 | .4 | 0 | |
| 0.4 | 2 | 0.8 | 0 | .8 | 0 | |
| 0.8 | 2 | 1.6 | 1 | .6 | 1 | |
| 0.6 | 2 | 1.2 | 1 | .2 | 1 | |
| 0.2 | 2 | 0.4 | 0 | .4 | 0 | |
| 0.4 | 2 | 0.8 | 0 | .8 | 0 | |
| 0.8 | 2 | 1.6 | 1 | .6 | 1 | |
| 0.6 | 2 | 1.2 | 1 | .2 | 1 | < Repeats after this |
| 0.2 | 2 | 0.4 | 0 | .4 | 0 | |
| 0.4 | 2 | 0.8 | 0 | .8 | 0 | |
| 0.8 | 2 | 1.6 | 1 | .6 | 1 | |
| 0.6 | 2 | 1.2 | 1 | .2 | 1 | |
+-------+-------+--------+---------+----------+--------+----------------------+