Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тех прог.doc
Скачиваний:
13
Добавлен:
14.11.2019
Размер:
3.59 Mб
Скачать

Плавающие константы

Числовые константы для типов чисел с плавающей точкой записываются в виде

[s]m.mmmE[+/-]pp.

Здесь s – знак числа, m.mmm – мантисса, количество цифр которой определяет точность числа, pp – порядок числа, который может быть положительным или отрицательным. Если знак отсутствует, число считается положительным. Символ E (или e) заменяет 10. Следующие константы дают три различных записи одного и того же числа:

123.321, 1.23321E2, 123321e-3.

В записи числовых констант недопустимы пробелы, так как пробелы считаются разделителями лексем.

По умолчанию считается, что числовые константы с плавающей точкой имеют тип double. Если требуется константа типа float, ее можно явно определить с помощью суффиксов f или F, например,

3.14159265f, 2.0F.

Для числовых констант типа long double используются суффиксы l или L:

2.71828182845904523536l, 3.14159265358979323846L

(это числа e и π соответственно).

3.3.Ввод и вывод чисел

Числовые данные выводятся в выходной поток оператором вывода <<, определенным в заголовочном файле iostream.h. Этот оператор способен выводить данные любых стандартных типов, в том числе отдельные символы, строки. Приемником данных для выходного потока может быть стандартное устройство для вывода (экран) или дисковый файл. В iostream.h определена потоковая переменная cout, связанная со стандартным выходным устройством, которую надо использовать при выводе результатов на экран.

При выводе чисел с плавающей можно управлять точностью, то есть числом цифр, представляющих число. Для этого используется функция precision. При вызове этой функции в виде cout.precision() она возвращает установленную точность. При вызове в виде cout.precision(n) задается число выводимых цифр n.

Для ввода чисел применяется оператор >> чтения из потока. Источником данных для входного потока может быть стандартное входное устройство (клавиатура) или файл на диске. При чтении чисел сначала пропускаются пробелы, затем читаются символы числа. Ввод числа прекращается при поступлении пробела, табуляции или новой строки. Для ввода с клавиатуры следует использовать стандартный входной поток cin, объявленный в заголовочном файле iostream.h.

При вводе данных любых типов оператором >> разделителем отдельных порций данных является пробел.

Оператор ввода >> читает из потока символы, которые допускаются в записи данных для типа вводимой величины. Например, при вводе чисел с плавающей точкой допустима буква e как обозначение порядка, а при вводе целых чисел эта буква недопустима. При вводе с клавиатуры, набранные символы будут обрабатываться после нажатия Enter.

Программа 5. Точность плавающих чисел

В программе переменная x типа float инициализируются константой с числом цифр заведомо большим, чем может разместиться в выделяемой для переменной памяти. При переводе констант, записанных в десятичной системе счисления, в двоичную систему, используемую внутри компьютера, лишние двоичные цифры, не умещающиеся в разряды, отведенные для числа, отбрасываются, за счет чего возникает ошибка усечения. Значение переменной y типа double вводится с клавиатуры. Далее переменные x и y печатаются с различной точностью.

// Файл PrnFloat.cpp

#include <iostream.h>

#include <conio.h>

void main()

{

float x = 12345.678987654321; // 17 цифр

double y;

cout << "Input y: "; // Приглашение ко вводу

cin >> y; // Ввод переменной y

// Печать точности по умолчанию

cout << "\nprecision = " << (cout.precision());

cout << "\n x = " << x << ", y = " << y;

cout.precision(4); // Установка точности 4

cout << "\nprecision = " << (cout.precision());

cout << "\n x = " << x << ", y = " << y;

cout.precision(18); // Установка точности 18

cout << "\nprecision = " << (cout.precision());

cout << "\n x = " << x << ", y = " << y;

cout.precision(6); // Восстановление точности по умолчанию

getch();

}

Далее приводится диалог с программой:

Input y: 123456789.87654321

precision = 6

x = 12345.7, y = 1.23457e+08

precision = 4

x = 1.235e+04, y = 1.235e+08

precision = 18

x = 12345.6787109375, y = 123456789.876543224

Оператор << выводит для чисел с плавающей точкой по умолчанию 6 цифр, при этом происходит округление, если все цифры числа не помещаются в отведенное число позиций. В зависимости от значения числа используется представление с фиксированной точкой или научный формат с показателем степени. Если точность превышает число цифр в числе, выводятся случайные цифры, заполняющие отведенные позиции.

Точность 18 цифр превышает точность представления чисел float и double, хотя оператор вывода «добросовестно» рисует на экране заказанные 18 цифр, но видно, что для float правильными являются только первые 8 цифр, а для double  первые 16.