Олег Деревенец - Песни о Паскале
- Название:Песни о Паскале
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Олег Деревенец - Песни о Паскале краткое содержание
Песни о Паскале - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Г) «Не думай о секундах свысока…». Штирлицу подарили секундомер, который показывал секунды, прошедшие с начала суток. Пусть ваша программа переведёт это число в привычные часы, минуты и секунды.
Подсказки: во-первых, примените операции DIV и MOD. Во-вторых, переменную для секунд объявите как LONGINT (а не INTEGER), поскольку количество секунд в сутках (86400) не поместится в типе INTEGER.
Глава 33
Вещественные числа

Почему так несовершенны все людские поделки? Даже компьютер и язык Паскаль! Эх, был бы числовой тип, пригодный на все случаи жизни, но…
Пять целочисленных типов не покрывают всех потребностей в вычислениях. Во-первых, диапазон их значений не так уж велик. Скажем, население Земли – около шести миллиардов – не поместится в переменной типа LongInt. А что сказать о комарином «населении»? Это, во-первых. А во-вторых, такими числами нельзя выразить дробные значения.
Выручают вещественные числа. Откуда такое чудное название? – Этими числами можно выразить количество сыпучих и жидких веществ. Если так, то целые числа следовало назвать штучными. У вещественных чисел есть и другое название – действительные. Которое из двух предпочтете? – дело вкуса.
Вещественные числа отнесены к простым типам, но устроены сложнее целых. Рассмотрим способы изображения таких чисел. Представить их можно двояко: либо в привычной для нас форме с фиксированной точкой (в Паскале точку используют вместо запятой), либо в так называемом научном (логарифмическом) формате. Увидев где-либо такое число, не пугайтесь, – здесь применен научный формат изображения вещественного числа.
3.33333343267441E-0002
Мы видим десятичную дробь, на хвосте которой болтается буква «E» и число -0002. Вот разгадка этой записи: дробь, что расположена до буквы «E», называется мантиссой, а число за этой буквой — порядком. Порядок показывает, на сколько позиций надо передвинуть десятичную точку в мантиссе для получения числа в привычном виде. Здесь порядок отрицательный, поэтому точка сдвигается на две позиции влево, а значит перед нами число 0.0333333343267441. Для положительного порядка точку двигают вправо, стало быть, число
3.33333343267441E+0003
в форме с фиксированной точкой запишется так: 3333.33343267441.
Разумеется, что при нулевом порядке точку не трогают. Вот и вся премудрость научного формата, который называют ещё форматом с плавающей точкой. Если научная форма кажется вам причудливой и неудобной, изобразите иначе следующие числа.
9.1093829140E-0031 – масса электрона, кг
1.9889200000E+0030 – масса солнца, кг
Паскаль может избавить вас от мысленных передвижений десятичной точки: при печати вещественных чисел допустимы спецификаторы ширины поля. Напомню, что для вещественных чисел спецификатор состоит из двух частей, разделенных двоеточием. Первая часть задает общую ширину поля печати, а вторая – количество знаков после точки. Рассмотрим несколько вариантов вывода одного и того же числа со спецификаторами и без них. Подопытным будет число 10/3, что соответствует бесконечному ряду троек: 3.333… и т.д. Вот программа для этого опыта.
{ Программа для исследования форматов вывода вещественных чисел }
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 –39 | 1.7 x 10 38 | 11-12 | 6 |
Single | Одинарная | 1.5 x 10 –45 | 3.4 x 10 38 | 7-8 | 4 |
Double | Двойная | 5.0 x 10 –324 | 1.7 x 10 308 | 15-16 | 8 |
Extended | Повышенная | 3.6 x 10 –4951 | 1.1 x 10 4932 | 19-20 | 10 |
Но почему в колонке минимальных значений я указал не нули, а очень маленькие числа? Да, ноль допустим, но для оценки точности вычислений важно знать именно этот предел. Разумеется, что указанные диапазоны распространяются и на отрицательные числа.
Теперь исследуем точность представления чисел разными типами данных.
{ Программа для исследования точности вещественных типов }
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. Его считают стандартным типом Паскаля, и для обработки таких чисел годится любой процессор (но вычисления будут медленными).
Но вот появились компьютеры с математическими сопроцессорами, многократно ускоряющими счет. Эти сопроцессоры оперируют с форматами, отличными от Real. Для совместимости с новой техникой в язык были введены ещё три типа чисел, указанные в табл. 3. Тип Extended даёт наивысшую точность и самый широкий диапазон представления чисел. И это понятно, ведь его размер больше, чем у других, и составляет 10 байтов. Но почему он выигрывает и в скорости? А потому, что для сопроцессора тип Extended – родной, применяйте его для вычислений. А что же Single и Double? Поскольку они занимают меньше места в памяти, то лучше подходят для хранения больших объёмов данных.
Читать дальшеИнтервал:
Закладка: