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

ВОЗМОЖНОСТИ МАСШТАБИРОВАНИЯ


Решим простую задачу, допустим, что нужно вычислить 2/з от 171. По существу, есть два способа нахождения результата:

1 Для специалистов Существует и более быстрое определение

: R% ( n % -- результат ) 50 */ 1+ 2/ ;

1. Определить значение дроби 2/3 путем деления числа 2 на число 3. При этом мы получим периодическую десятичную дробь, .666666... Далее можно умножить полученное значение на 171. Результат составит 113.9999999 и т. д., что не совсем точно, но он может быть округлен до 114.

2. Перемножить 171 и 2, а затем разделить полученное число 342 на 3, что дает в результате 114.

Заметим, что второй способ проще и намного точнее

Большинство машинных языков поддерживает первый способ. В компьютере не могут храниться такие дроби, как 2/3, на всякий случай. Их нужно выражать в виде десятичной дроби, например .666666...

Форт поддерживает второй способ. Операция */ позволяет вам получать дроби, аналогичные 2/3, как в следующем примере:

171 2 3 */

Теперь, когда вы имеете некоторое представление о масштабировании, рассмотрим несколько более сложный пример. Допустим, требуется разделить 150 дол. в заданной пропорции :7.105 ?

5.145 ? ------ --- 12.250 150

Эту задачу можно решить так: (7.105/12.250) х 150 и (5.145/12.250) х 150

Однако для обеспечения большей точности мы должны написать (7.105 х 150)/12.250 и (5.145 х 150)/12.250

На Форте это будет выглядеть следующим образом: 7105 150 12250 */ . 87 ok

и 5145 150 12250 */ . 63 ok

Мы можем сказать, что значения 87 и 63 выбраны в «масштабе» к 7105 и 5145. Вычисление процентов, выполненное нами ранее, также представляет собой форму масштабирования. По этой причине операция */ называется операцией масштабирования.

Еще одной операцией масштабирования является операция */MOD:*/MOD ( n1 n2 nЗ -- Умножение, затем деление (n1*n2/n3). n-остаток n-результат ) Помещение на стек остатка и частного. Для промежуточного результата используется слово двойной длины.

Самостоятельно придумайте хороший пример на выполнение операции */MOD



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