Язык программирования Форт



         

Глава 4. Еще об арифметических операциях - часть 28


В табл. 4.3 показаны их функции. Из этой таблицы ясно видно, что они делают, а также приведены аналоги для чисел одинарной длины.

Слово Действие М* n n --- d М*/ d n n - d (промежуточ. результат - число тройной длины) M+ d n --- d M- d n --- d M/ d n -- n M/MOD d n -- n n DU* ud ud -- uq DU/MOD uq ud--- ud ud Таблица 4.3. Операторы для смешанных действий Обозначения: n - число одинарной длины; d - число двойной длины; q - число учетверенной длины, т.е. 64-разрядное; u - без знака.

Упражнения

1. Используйте UM* для преобразования числа одинарной длины в число двойной длины. Имеет ли значение знак( можно сделать это еще быстрее, попросту помещая 0 в стек.) 2. Вспомните, как хранятся в стеке числа двойной длины в старших и младших ячейках. Имея это в виду, определите следующие смешанные операторы, которые имеются в MMSFORTH: М*, М+, М/ и M/MOD. 3. В чем различие между U/MOD и M/MOD? а также между U* и М* ? 4. Число двойной длины 123.45 помещено в стек и представляет доллары и центы. Определите слово ->DOLLARS, которое должно возвращать число долларов в виде числа одинарной длины. Определите другое слово ->CENTS, которое будет возвращать число центов в виде числа одинарной длины. Проделайте это упражнение, пользуясь словами из MMSFORTH и стандартными операторами. 5. Определите слово FRAC, которое должно умножать число двойной длины на отношение двух чисел одинарной длины, т.е. выражение 500. 3 5, после которого стоит это слово, должно давать в стеке значение 300 в виде числа двойной длины. Теперь определите это слово, пользуясь смешанными операторами MMSFORTH (последнее определение является тривиальным).

Расширение операций над числами с плавающей запятой

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


Содержание  Назад  Вперед