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



         

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


Например, выражение а/х + b/x + с/х может дать менее точный результат, чем выражение (а+b+с)/х. Чтобы убедиться в справедливости этого утверждения, проверьте это с какими-либо числами.

Оператор */ очень удобен для умножения на дробь с постоянным знаменателем. Например, вы можете определить слово PERCENT (процент) : : PERCENT 100 */ ; так, что выражение 130 50 PERCENT положит в стек число 65 (50% от 130). В некоторых случаях вы хотели бы иметь результат смешанной операции */ с большей точностью, чем получается с по мощью обычного умножения с последующим делением.Наилучший метод избежать потери точности - это убедиться, что перед операцией */ входные операнды уже увеличены с помощью масштабирования для получения желаемой точности. Например, если вы вычисляете 3/4 от 123, то в плавающей арифметике вы получите 92.25, а в целочисленной - 92. Следует изменить масштаб чисел, чтобы операция и */ производилась не с числом 123, а с числом 12300. Это еще один пример того, что, применяя целочисленную арифметику, программист должен заранее все продумать. Но есть еще один способ не потерять точность, если вы по какой-либо причине не хотите предварительным масштабированием увеличить числа: применить оператор */MOD (подобно */, он называется масштабным оператором). Например, выражение 123 3 4 /MOD выдает на вершину стека частное 92 и вторым сверху - остаток 1. Вы можете использовать остаток, если не хотите потерять точность, применяя выражение 123 3 4 */MOD SWAP 100 4 */ которое положит в стек 92 25. Это значит, что на вершине стека находится число, которое представляет собой два разряда после десятичной запятой в представлении с плавающей запятой. Если вы продумаете тщательно программу, то сможете с помощью целых чисел выразить эквивалент числа с плавающей запятой, а, пользуясь форматным выводом, как описано в гл.5, вы сможете даже напечатать результат с десятичной запятой (например, 92.25).

Приближенное представление чисел с помощью рациональных дробей

Предположим, что вы хотите найти длину периметра круга, которая равна диаметру, умноженному на число Пи.


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