5 ответов:
в университете я узнал это так:
- умножить на два
- принять десятичное число в качестве цифры
- принимать фракцию в качестве отправной точки для следующего шага
- повторяйте, пока вы не дойдете до 0 или периодического числа
- читать число, начиная с верхней-первый результат является первой цифрой после запятой
пример:
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/10. Например:
1/16 + 1/32 = 0.09375, что довольно близко к 1/10. Добавление 1/64 ставит нас выше, как и 1/128. Но, 1/256 делает нас еще ближе. Итак:
0.00011001 binary = 0.09765625 decimal, что близко к тому, что вы спросили.
вы можете продолжать добавлять все больше и больше цифр, так что ответ будет 0.00011001...
вот как думать о методе.
каждый раз, когда вы умножаете на 2, вы сдвигаете двоичное представление числа слева на 1 место. Вы переместили самую высокую цифру после точки На 1-е место, поэтому снимите эту цифру, и это первая (самая высокая, поэтому самая левая) цифра вашей фракции. Сделайте это снова, и у вас есть следующая цифра.
преобразование базы целого числа путем деления и взятия остатка в качестве следующей цифры сдвигает номер справа. Вот почему вы получаете цифры в обратном порядке, сначала самые низкие.
Это, очевидно, обобщается на любую базу, а не только на 2, как указано GoofyBall.
еще одна вещь, о которой нужно подумать: если вы округляете до N цифр, остановитесь на N+1 цифрах. Если цифра # N+1 является единицей, вам нужно округлить (поскольку цифры в двоичном формате могут быть только 0 или 1, усечение со следующей цифрой a 1 так же неточно, как усечение 5 в десятичном формате).
мне потребовалось некоторое время, чтобы понять ответ @Femaref ('s), поэтому я подумал, что буду уточнять.
Elboration
вы хотите, чтобы преобразовать десятичное число
1/10что равно0.1в двоичном формате. Начинаются с0.1в качестве входных данных и выполните следующие действия:
- умножьте входной сигнал на 2 (столбец mult)
- возьмите десятичное число из ответа (столбец ответа) в качестве цифры (двоичный столбец)
- примите фракцию (столбец фракции) как входной сигнал для следующего шага
- повторяйте шаги 1, 2 и 3, пока не получите 0 или периодическое число. Начало периодического числа в этом случае показано в последнем столбце, поэтому мы можем остановиться на этом. Но я продолжал показывать повторение для ясности.
- ответ-Это числа, взятые из двоичного столбца, начинающегося сверху.
в данном случае это:
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 | | +-------+-------+--------+---------+----------+--------+----------------------+
Comments