...
Здесь 1.0Е-15 — точность для типа переменной d (Double).
Продолжим перечень особенностей применения сопроцессора. Его наличие в ПЭВМ и использование сильно влияет на работу функции округления Round: она начинает округлять полуторные значения в сторону ближайшего четного целого числа (это называется «банковским способом»)! Например:
без сопроцессора с сопроцессором
Round(0.5) --> 1 Round(0.5) --> 0
Round(1.5) --> 2 Round(1.5) --> 2
Round(2.5) --> 3 Round(2.5) --> 2
Round(3.5) --> 4 Round(3.5) --> 4
С остальными значениями (без '.5') функция работает нормально.
Некоторые неприятности могут поджидать любителей рекурсивного подхода к написанию функции. Возможны, в принципе, ситуации, когда рекурсивные вызовы переполнят внутренний стек данных сопроцессора, рассчитанный на восемь уровней рекурсии, и возникнет сбой программы. Возможным решением будет разнесение сложнорекурсивных выражений типа Fn:=Fn(N-1)+Fn(N-2) по локальным переменным, например, f1:=Fn(N-1); и f2:=Fn(N-2). После этого выражение Fn:=f1+f2 будет безопасным для сопроцессора.
Завершая тему использования сопроцессора, напомним, что и расширенные вещественные типы, и тип Real при работе с сопроцессором 80X87 выводятся на печать операторами Write и WriteLn с 4 цифрами в показателе степени:
при $N- WriteLn(123.4) выдаст 1.2340000000Е+02,
но при $N+ WriteLn(123.4) выдаст 1.234000000000000Е+0002.
Этот факт надо учитывать при форматированном выводе и при преобразовании чисел в строку процедурой Str.
- 186 -