[an error occurred while processing this directive]
|
Далее. Никто про Вашу тупость напрямую не говорил, не надо ля-ля. Вам было сказано, что алгоритм недостаточно продуман. Более того, теперь мы знаем, что авторами алгоритма являются совсем другие люди, значит Вы вообще ни при чем(:-).
Теперь по делу, т.е. по Вашему коду. Вы получаете произведение RC*ATMB(IB) и своими собственными руками умножаете его на 2, подготавливая почву, так сказать, к переполнению. Но у Вас же 40-битный аккумулятор, кто мешает вначале сложить в нем НЕсдвинутое вправо произведение RC*ATMB(IB) со сдвинутым на 15 битов вправо (а не на 16! как у Вас) ATMB(IP), получить 40-битный результат, округлить до требуемого разряда и сохранить необходимые 16-бит? В итоге переполнений будет меньше, а то и не будет вообще. Сказанное выше является результатом непродуманности алгоритма.
А если вы хотите применить 2 мака, переполнение надо проверять после каждого, увы, хотите вы этого или нет!
Далее, при обработке переполнения, Вы масштабируете заново и заново считаете значение, но почему-то не обращаете внимание, что может возникнуть переполнение опять. Опять здесь видна сыроватость алгоритма.
E-mail: info@telesys.ru