Начальный курс программирования на языке Форт

         

ОПЕРАЦИИ НАД ЧИСЛАМИ РАЗЛИЧНОЙ ДЛИНЫ


В следующей таблице перечислены часто используемые слова Форта, которые выполняются над комбинацией чисел одинарной и двойной длины1:UM* ( ul u2 -- ud) Перемножение двух 16-разрядных чисел. Все значения без знака. (В предыдущих версиях данная операция называлась U*)

UM/MOD ( ud u1 -- u2 u3) Деление 32-разрядного числа на 16-разрядное. В стек заносятся 16-разрядные остаток и частное ( честное в вершину). Частное округлено до ближайшего меньшего целого! Все значения без знака. (В предыдущих версиях данная операция называлась U/MOD).

M* ( n1 n2 -- d- Перемножение двух 16-разрядных чи- произведение) сел. Все знамени» со знаком.

М+ ( d n -- d-сумма) Сложение 32-разрядного и 16-раэрядного чисел. Результат 32-разрядный.

М/ ( d n -- n-частное) Деление 32-разрядного числа на 16-разрядное. Результат 16-разрядный. Все значения со знаком.

М*/ ( d n u -- d) Умножение 32-разрядного на 16-разрядное и деление промежуточного результата тройной длины на 16-разрядное число (d*n/u). Результат 32-разрядный.

Слово UM* является командой быстрого умножения, где под результат отводится 32 разряда. Эта команда может быть использована как базовая при определении других операций умножения. Аналогичным образом все команды деления могут быть определены через базовую операцию UM/MOD.

Ниже приводится пример выполнения операции М+: 200,000 7 М+ D. 200007 ok

С помощью операции М*/ мы можем переопределить наш прежний вариант слова % так, что оно будет выполняться с аргументом двойной длины:: % ( d n% -- d) 100 M*/ ;

1 См. сноску в разд. «Операции деления» (гл. 2).

Например:200.50 15 % D. 3007 ok

Если вы загрузили определение „J6 (которое мы приводили ранее), то можете ввести следующий текст: 200.50 15 % .$ $30.07

Можно переопределить данное выше определение R% таким образом, чтобы получать округленный результат двойной длины : R% ( d n% -- d) 10 M*/ 5 M+ 1 10 M*/ ;

и тогда 200.50 15 R% .$ $30.08

Заметим, что М*/ является единственным «штатным» словом Форта, которое осуществляет умножение аргумента двойной длины. Для того чтобы умножить, скажем, 200000 на 3, мы должны подставить единицу в качестве фиктивного делителя:200,000 3 1 M*/ D. 600000 ok

так как 3/1 эквивалентно 3.

М*/ также является единственным словом Форта, которое осуществляет деление с результатом двойной длины. Так, при делении 200000 на 4 мы должны подставить единицу в качестве фиктивного числителя: 200,000 1 4 M*/ D. 50000 ok



Содержание раздела