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


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


Как вы видели, для масштабирования нецелые величины можно выразить в виде пары целых чисел. В некоторых программах вещественные числа могут понадобиться не только для маштабирования. Например, как сложить две дроби, не используя представление с плавающей точкой?

7 . 23 Ж"Н9 =

На Форте вы можете сделать это с помощью команд так называемой дробной арифметики, реализующих операции над числами с фиксированной точкой.

При использовании дробной арифметики мы применяем масштабирование с подразумеваемым положением десятичной точки. Но вместо масштабирования посредством умножения на степень 10 (как принято при вычислениях вручную) мы будем масштабировать путем умножения на степень 2 (как принято при вычислении на компьютере). Таким образом, выражение «десятичная точка» уместно заменить выражением «двоичная точка»"

1 Для истинных математиков Ниже приводится небольшая таблица вещественной аппроксимации различных констант:

2 Для начинающих Этот вопрос подробнее рассматривается в гл 7

Допустим, вы ввели следующее определение: : +1 ( -- масштабная-единица ) 16364 ;

Здесь выбран масштаб» при котором число 16384 представляет положительную единицу (константы будут введены в гл. 8). В двоичной системе счисления число 16384 выглядит следующим образом: 0100000000000000

т. е. это единица в соответствующем масштабе с подразумевае-мой двоичной точкой.

Теперь добавьте к Форту две новые арифметические операции: дробное умножение и дробное деление, выполняемые с учетом выбранного нами масштаба. : *. ( n n -- n) +1 */ ;

: /. ( n n -- n) +1 SWAP */ ;

Что же у вас получилось? При делении единицы на единицу должна получиться единица.1 1 /. . 16384 ok

(Напомним, что в выбранном масштабе 16384 это единица.) Теперь разделите 1 на 2: 1 2 /. . 8192 ok

Здесь 8192 представляет половину единицы (половина от 16384). Следовательно, вы можете решить поставленную задачу таким образом: 7 34 /. 23 99 /. +

Обратите внимание на последнюю операцию.


Начало  Назад  Вперед



Книжный магазин