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



         

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


Программа для этого выглядит не очень сложно. Мы приводим программу деления с округлением, которая делает все, что нужно: : R/ SWAP OVER /MOD SWAP 2 * ROT / + ; Испытайте ее: 26 5 R/ даст в результате 5, а 29 5 R/ даст в результате 6. Вот что здесь происходит. Делитель был помещен на дно стека, затем скопирован на вершину, чтобы осуществить деление с остатком. Остаток был скопирован, а затем поделен на исходный делитель. Это второе частное должно быть равно 1, если первое частное должно быть округлено, причем в этом случае оно должно быть сложено с первым частным. Иначе второе частное должно быть равно 0 и первое частное должно быть оставлено без изменения. Почему эта программа работает? В терминологии деления с плавающей запятой число следует округлить, если дробная часть частного больше или равна 0.5, т.е. дробная часть должна быть умножена на 2, если она больше или равна 1. В целой форме дробная часть удваивается, конечно, удвоенный остаток помещается поверх делителя. Но бывают случаи, когда вы должны сделать округление после деления; это случается, когда вы хотите, чтобы сумма последовательности частных имела ошибку в сторону увеличения или когда вы скорее склонны переоценить результат, чем недооценить его. Чтобы произвести округление, вы просто добавляете 1 к нормальному частному от деления двух целых чисел, если остаток не равен 0. Вот слово.которое это делает на Форт-83: : RUP/ /MOD SWAP 0= 0= + : Слово 0= будет более подробно рассмотрено чуть позже, вкратце оно возвращает 1, если на вершине стека 0, или 0 - в противном случае. Зная это, вы должны понимать, как работает RUP/.

Упражнения

1. Сделайте следующие упражнения в уме: (а) 5Е5х5Е10 (б) 5Е5х5Е-10 (в) 5Е5х5Е0 (г) 5Е-1х5Е-5 (д) 5Е5/5Е10 (е) 5Е5/5Е-5 (ж) 5Е2 + 2Е3 (э) 5Е2 + 5Е-3 (и) 5Е2 - 2Е-3 (к) 5Е2 - 5Е-3 2. Показательная форма записи может применяться и для целых чисел, но не часто. Мантисса должна быть сохранена второй в стеке, а показатель степени - на вершине стека. Таким образом, для 5Е10 в стеке находятся числа 5 10.


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