Я пытаюсь понять, почему работает алгоритм с двойной ошибкой, но я не получаю его.Почему работает алгоритм двойного барабана?
Есть много хороших описания шагов и цель алгоритма, как http://www.classiccmp.org/cpmarchives/cpm/mirrors/cbfalconer.home.att.net/download/dubldabl.txt или http://en.wikipedia.org/wiki/Double_dabble
Есть также некоторые попытки объяснения. Самый лучший, который я нашел, это один: http://www.minecraftforum.net/forums/minecraft-discussion/redstone-discussion-and/340153-why-does-the-double-dabble-algorithm-work#c6
Но я все еще чувствую, что мне не хватает соединительных деталей. Вот что я получаю:
- Я получаю, что вы можете преобразовать двоичные числа в десятичные числа, читая их слева направо, начиная с десятичным значением 0, итерация цифр двоичного числа, добавляя 1 до десятичного числа для каждого 1, которое вы достигнете в двоичном числе, и умножения на 2, когда вы переходите к следующей цифре (как объясняется в последнем сообщении).
- Но почему это приводит к двойному алгоритму? Мы не хотим конвертировать в десятичной форме, мы хотим конвертировать в BCD. Почему мы сохраняем умножение (смещение), но мы бросаем добавление 1? Где соединение?
- Я получаю, почему мы должны добавить 3, когда число в поле BCD превышает 4 перед переходом. Потому что, если вы хотите, чтобы число BCD умножалось на 2, если вы меняете его, вам нужно сделать некоторые исправления. Если вы переместите номер BCD
0000 1000
(8), и вы хотите получить двойной0001 0011
(16), перед переносом вам нужно добавить 3 (половина из 6), потому что, просто переместив вас, вы получите0001 0000
(10) (вы 'отсутствует 6).- Но почему мы хотим этого и где добавление 1 происходит?
Я предполагаю, что я просто не хватает небольшую часть.