Деление n-битных двоичных целых чисел

Было интересно, может ли кто-нибудь помочь мне с созданием псевдокода для того, чтобы разделить n-битные двоичные целые числа. Вот то, что я думаю, может сработать прямо сейчас, может ли кто-нибудь исправить это, если я ошибаюсь:

divide (x,y)
     if x=0: return (0,0) //(quotient, remainder)
     (q,r) = divide(floor(x/2), y)

     q=2q, r=2r
     if x is odd: r = r+1

     if r >= y: r = r-y, q = q+1
          return (q,r)

Не могли бы вы, ребята, сказать, что этот общий алгоритм псевдокода выполнит намеченную задачу деления n-битных чисел, или мне что-то не хватает в моем псевдокоде, прежде чем я начну кодировать что-то неправильное?


person Valrok    schedule 19.09.2012    source источник
comment
кодирование чего-то неправильного иногда может помочь вам понять, где и почему это неправильно. Я много учусь просто через отладку   -  person Fuzz    schedule 19.09.2012
comment
также, из-за рекурсивного характера вашей программы, будет работать только для значений 'n', когда ваш стек не заполняется :-)   -  person Fuzz    schedule 19.09.2012
comment
Вероятно, вы могли бы сэкономить много бесполезных итераций, изменив условие завершения на: if x ‹y: return (0, x).   -  person rici    schedule 19.09.2012
comment
Привет, ребята, спасибо за комментарии! На самом деле я забыл, что задал этот вопрос, и только что перепроверил, однако мне удалось выяснить, как получить не только псевдокод, но и программу, которую я писал. Спасибо за советы, хотя всем, и Fuzz то, что вы упомянули, действительно правильно, в то время я просто искал мнения и смотрел, что люди могут предложить, поскольку я был на начальных этапах создания своей программы. Спасибо всем!   -  person Valrok    schedule 23.09.2012


Ответы (1)


Помимо очевидных вещей (без проверки деления на ноль, без обработки отрицательных чисел), похоже, он работает. Я убедил себя, просто применив это к числам с основанием 10.

person Nitzan Shaked    schedule 19.09.2012