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




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


На IBM PC на выполнение 1 миллиона операций 2/ MMSFORTH расходует 22 с, а на миллион операций 2 / 80 с. Поскольку действия с числами 1 и 2 встречаются очень часто, особенно при повторяющихся операциях, использование этих слов может значительно увеличить скорость работы программ. Может быть, это и мелочь, однако это хороший пример того, как Форт оптимизирует быстродействие.

Некоторые проблемы операции деления

Предположим, что вы хотите умножить число 20000 на 5 и разделить произведение на 2, при этом должно получиться 50000. Попробуйте это сделать, введя 20000 5 * 2 / U. 42 и то, что вы увидите, будет наверняка неправильно. При умножении происходит переполнение и заведомо неверный результат умножения точно делится на 2. Но эту задачу можно решить иначе: 20000 2 / 5 * ведь не всегда же вы сможете узнать, будут ли расположены большие и малые числа в правильной поcледовательности. Слово */ разрешает эту проблему, запоминая промежуточный результат в виде 32-разрядного числа, а не 16-разрядного, как обычно, допуская значение произведения до 4271406735. Таким образом устраняется возможность переполнения.

Еще одна проблема, возникающая при делении, - это проблема остатка. При целочисленных операциях сложения, вычитания и умножения результат представляет собой другое целое число. Для деления это не так. Например, если 3 поделить на 2, должно получиться 1.5 = 1 + 5/10. Нам нужно каким-либо образом определить остаток от деления (который иногда называется модулем деления). Остаток находится с помощью слова MOD. Если вы введете 3 2 MOD . то на экране получите 1. 25 7 MOD . дает в результате 4. Другими словами, слово MOD выдает остаток от деления двух чисел, или модуль. Есть еще два других слова, которые дают в результате остаток. Одно из них, /MOD, дает остаток от деления двух чисел и частное, которое помещается поверх остатка. Таким образом, 5 3 /MOD . . дает в результате пару чисел 1 и 2, в то время как 25 7 /MOD . . выдает в результате 3 4. Слово */MOD связано с обеими операциями */ и MOD. 332 */MOD . .


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