spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
Вместо эпиграфа: — Феофания, у нас проблема!

Имеем следующее: Банальное исполнение целого деления через плавающую точку, как это реализовано в Паскале, закономерно приводит к floor(a/b):

                , ntr ,     . включили нормализацию
                , avx ,     . нормализовали
            15  , stx , 1   . сумматор (делитель) - в пустое место выше стека, 
                            . делимое - из стека на сумматор
                , avx ,     . нормализовали
            15  , a/x , 2   . поделили (указатель стека декрементирован командой stx, поэтому 2)
                , ntr , 3   . выключили нормализацию
            1   , a+x , 11b . прибавили 0 с целым порядком, лежащий по известному смещению по регистру 1
                            . это выдвигает дробную часть из сумматора


Для честной реализации современного Си нужно деление, которое делает округление в сторону нуля - это неизбежно вытекает из того, что современный Си стандартизирует операцию % как remainder (знак результата соответствует знаку делимого). Можно, конечно, наплевать и сказать, что раз это стандартизовали только в С99, то насильно делать это в БЭСМовском Си было бы анахронично, но всё равно интересно, сколько команд потребует реализация целого деления "правильно". Для простоты примем, что время выполнения нам непринципиально.

Что удобно, реализация остатка не нуждается в изменении: он в любом случае считается как a - a/b*b.

Необходимое примечание: команда avx с неотрицательным операндом только нормализует, с отрицательным - нормализует и обращает знак. Это удобно и выгодно, поскольку обращение знака от MIN_INT одновременно снормализацией работает как надо. Нормализованность операнда роли не играет, команда смотрит только на знак.

Profile

Сообщество любителей БЭСМ-6

June 2026

S M T W T F S
 12345 6
78910111213
14151617181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 7th, 2026 05:46 pm
Powered by Dreamwidth Studios