Язык Форт и его реализации



             

Стек данных и вычисления - часть 4


Наконец, одноместные операции 1+, 1-, 2+, 2- выполняют действие, отраженное в их мнемонике: увеличение или уменьшение значения на вершине стека на 1 или 2; аналогично слово 2/ возвращает частное от деления своего параметра на 2. Эти слова включены в стандарт ввиду частого использования соответствующих действий.

Использование стека для хранения промежуточных значений естественным образом приводит к так называемой «обратной польской форме» — одному из способов бесскобочной записи арифметических выражений, подразумевающему постановку знака операции после операндов. Например, выражение (A/B+C)*(D*E-F*(G-H)) записывается следующим образом: A B / C + D E * F G H - * - *. Очевидно, что этот текст выполним для Форта, если A, B и т.д. — слова, которые кладут на стек по одному числу. Таким образом, форт-систему можно использовать как калькулятор. Чтобы вычислить, например, значение (25+18+32)*5, достаточно ввести такой текст: 25 18 + 32 + 5 * .. В ответ система напечатает (исполняя точку) ответ: 375.

Чтобы повысить точность вычислений в последовательности умножение-деление, стандарт предусматривает два необычных слова:

*/ A,B,C ---> частное от (A*B/C) */MOD A,B,C ---> остаток, частное от (A*B/C)

Особенность этих слов состоит в том, что промежуточный результат А*В вычисляется с двойной точностью, и в качестве делимого для С используются все его 32 разряда. Окончательные же результаты являются 16-разрядными числами.

Наряду с описанной выше 16-разрядной арифметикой, язык Форт имеет полный набор средств для работы с 32-разрядными целыми числами через стандартное расширение двойной точности. Внутренним представлением таких чисел является 32-разрядный двоичный дополнительный код, представляющий их как числа со знаком в диапазоне от -2147483648 до +2147483647 или как числа без знака в диапазоне от 0 до 4294967295. При размещении в стеке числа двойной точности занимает два элемента: верхний — старшая половина, предыдущий — младшая.


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