Песни о Паскале | страница 128




>{ Программа для исследования форматов вывода вещественных чисел }

>begin

>      Writeln( 10/3);       { без спецификаторов }

>      Writeln( 10/3 : 12);   { указывается только ширина поля }

>      Writeln( 10/3 : 15:0); { только целая часть }

>      Writeln( 10/3 : 15:2); { два знака после точки }

>      Writeln( 10/3 : 15:3); { три знака после точки }

>end.


Результат её работы таков.


>3.33333333333333E+0000

>3.333E+0000

>      3

>      3.33

>      3.333


Как говорится, лучше раз увидеть… Вывод ясен: если не указать спецификатор поля или его вторую часть, то число выводится в научном формате с плавающей точкой, а иначе – с фиксированной.

Типы вещественных чисел

Подобно целым, вещественные числа представлены несколькими типами, которые разнятся размерами и диапазонами значений. Причина разнообразия все та же – стремление сэкономить память. В табл. 3 показаны четыре типа вещественных чисел языка Паскаль.

Табл. 3 – Вещественные типы

Тип данныхТочностьДиапазон возможных значенийКоличество значащих цифр (точность)Размер в байтах
ОтДо
RealСтандартная2.9 x 10>–391.7 x 10>3811-126
SingleОдинарная1.5 x 10>–453.4 x 10>387-84
DoubleДвойная5.0 x 10>–3241.7 x 10>30815-168
ExtendedПовышенная3.6 x 10>–49511.1 x 10>493219-2010

Но почему в колонке минимальных значений я указал не нули, а очень маленькие числа? Да, ноль допустим, но для оценки точности вычислений важно знать именно этот предел. Разумеется, что указанные диапазоны распространяются и на отрицательные числа.

Теперь исследуем точность представления чисел разными типами данных.


>{ Программа для исследования точности вещественных типов }

>var F0 : Real; F1 : single; F2 : double; F3 : extended;

>begin

>      F0:= 1/3; F1:= 1/3; F2:= 1/3; F3:= 1/3;

>      Writeln('Single = ', F1:23:18);

>      Writeln('Real = ', F0:23:18);

>      Writeln('Double = ', F2:23:18);

>      Writeln('Extended= ', F3:23:18);

>end.


Десятичное представление дроби 1/3 нам известно, – это бесконечная последовательность троек, а результат вычислений по этой программе перед вами (для Borland Pascal, в других компиляторах результаты могут немного отличаться):


>Single = 0.333333343267440796

>Real = 0.333333333333484916

>Double = 0.333333333333333315

>Extended= 0.333333333333333333


Как и следовало ожидать, тип Extended дает самую высокую точность, – после десятичной точки следуют одни тройки. Другие типы менее точны. Если так, зачем они нужны? Обратимся к истории.

Первые версии Паскаля ещё не застали персональных компьютеров. Тогда в языке существовал только один тип вещественных чисел – Real. Его считают стандартным типом Паскаля, и для обработки таких чисел годится любой процессор (но вычисления будут медленными).