При использовании сопроцессора 80x87 тип с повышенной точ-
ностью Extended является основой всех операций с плавающей точ-
кой. В Турбо Паскале тип с повышенной точностью используется для
представления всех нецелых числовых констант, а также при вычис-
лении всех выражений нецелого типа. Например, в следующих опера-
циях присваивания все правые части выражений будут вычисляться,
как выражения с повышенной точностью, а затем их тип будет преоб-
разован к типу соответствующей левой части:
{$N+}
var
X, AA, B, C : real;
begin
X := (B + Sqrt(B*B - A*C))/A;
end;
Borland Pascal выполняет вычисления с точностью и диапазоном
представления чисел, соответствующими типу с повышенной точ-
ностью, без дополнительных усилий программиста. Дополнительная
точность приводит к меньшим ошибкам округления, а дополнительный
диапазон означает, что ситуации переполнения и потери значимости
будут встречаться в программах реже.
Вы можете обойтись и без дополнительных автоматических воз-
можностей вычислений с повышенной точностью Borland Pascal. Нап-
ример, описать переменные, использующиеся для промежуточных вы-
числений, как переменные с повышенной точностью. В следующем при-
мере вычисляется сумма произведений:
var
Sm : single;
X,Y array[1..100] of single;
I : integer;
T : extended; { для промежуточных результатов }
begin
T := 0.0;
for I := 1 to 100 do T := T + X[I] * Y[I]
Sum := T;
end;
Если бы переменная T была описана, как переменная с одинар-
ной точностью, то при каждом цикле операции присваивания для пе-
ременной T были бы выполнены с ошибкой округления и ограничения-
ми, соответствующими одинарной точности. Но, поскольку переменная
T является переменной с повышенной точностью, то все ошибки ок-
ругления (кроме операции, при которой значение переменной T прис-
ваивается переменной Suм) имеют ограничения, соответствующие по-
вышенной точности. Меньшие ошибки округления означают более точ-
ный результат.
Для значений формальных параметров и результата функции вы
также можете задать повышенную точность. Это поможет избежать не-
нужных преобразований типов чисел, приводящих к потере точности.
Например:
function Area(Radius: extended): extended;
begin
Area := Pi * Radius * Radius;
end;