деление на (2^n - 1)

Тема в разделе "WASM.A&O", создана пользователем event, 6 сен 2004.

  1. event

    event New Member

    Публикаций:
    0
    Регистрация:
    6 сен 2004
    Сообщения:
    2
    Адрес:
    Latvia
    Не подскажете, нету ли быстрого алгоритма целочисленного беззнакового деления на эту фигню?
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
  3. event

    event New Member

    Публикаций:
    0
    Регистрация:
    6 сен 2004
    Сообщения:
    2
    Адрес:
    Latvia
    А без умножений?
     
  4. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Ага, теперь ему уже и умножений не надо. Ну что ж. Реализуй сложение в цикле :)
     
  5. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Любопытная задача на мой взгляд.

    Если только абстрогироваться от х86 и просто расмотреть различные варианты в духе Уорена.

    Если рассмотреть деление X на 2^n -1 как частное от деления X\2^n + Y наблюдается любопытная рекурентость.
     
  6. Gray

    Gray New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2004
    Сообщения:
    75
    Адрес:
    Russia
    Вот тебе без умножений алгоритм:

    Пусть даны целые числа A и B=2^n-1

    Требуется найти X=A/B, что эквивалентно X*B=A.



    Двоичная запись B состоит из одних единиц.



    Пусть (для примера) B=1111

    Пусть xyzuvw - двоичная запись X

    Пусть abcdefghi - двоичная запись A



    Запишем умножение X*B в столбик



    ___xyzuvw

    _____1111

    --------------

    ___xyzuvw

    __xyzuvw

    _xyzuvw

    xyzuvw

    ----------------

    abcdefghi



    Отсюда можно рекурентно найти неизвестные биты w,v,u...



    w=i

    v=h-w

    .... и т.д.



    P.S. Не забудь переносы при сложении учитывать.