• double — (возможно) более крупная единица хранения чисел с плавающей запятой. Может допускать больше значащих цифр и, возможно, большие экспоненты, чем тип float. Может представлять, по меньшей мере, 10 значащих цифр. Обычно занимает 64 бита.
• long double — (возможно) еще более крупная единица хранения чисел с плавающей запятой. Может допускать больше значащих цифр и, возможно, большие экспоненты, чем тип double.
Комплексные числа имеют два компонента: действительную часть и мнимую часть. Стандарт С99 внутренне представляет комплексное число в виде двухэлементного массива, в котором первый элемент является действительной частью, а второй — мнимой частью. Существуют три типа комплексных чисел.
• float _Complex — представляет действительную и мнимую части с помощью значений типа float.
Приложение Б
• double _Complex — представляет действительную и мнимую части с помощью значений типа double.
• long double _Complex — представляет действительную и мнимую части с помощью значений типа long double.
В каждом случае тип в префиксе называется соответствующим вещественным типом. Например, соответствующим вещественным типом в double_Complex является double.
В стандарте С99 комплексные типы были необязательными для автономных сред, в которых программы С могли выполняться без операционной системы. В стандарте С11 комплексные типы необязательны и для автономных, и для размещаемых сред.
Существуют также три мнимых типа; они необязательны как для автономных сред, так и для размещаемых сред (сред, в которых программы С выполняются под управлением операционной системы). Мнимое число имеет только мнимую часть.
Ниже приведен список мнимых типов.
• float Imaginary — представляет мнимую часть с помощью значений типа
float.
• double _Imaginary — представляет мнимую часть с помощью значений типа
double.
• long double _Imaginary — представляет мнимую часть с помощью значений типа long double.
Комплексные числа могут быть инициализированы с применением вещественных чисел и значения I, которое определено в complex.h и представляет i, т.е. квадратный корень из -1:
#include // для I
double _Complex z = 3.0; // действительная часть =3.0, мнимая часть = 0
double _Complex w = 4.0 * I; // действительная часть = 0.0, мнимая часть = 4.0
double Complex u = 6.0 — 8.0*1; //действительная часть = 6.0, мнимая часть = -8.0
Библиотека complex.h, обсуждаемая позже в этом приложении, включает функции, которые возвращают действительный и мнимый компоненты комплексного числа.
Сводка: объявление простой переменной
1. Выберите необходимый тип.
2. Выберите имя для переменной.
3. Используйте следующий формат оператора объявления:
специфика тор- типа имя-переменной;
спецификатор-типа формируется из одного или более ключевых слов. Вот некоторые примеры:
int erest;
unsigned short cash;
4. Чтобы объявить несколько переменных одного и того же типа, отделяйте их имена друг от друга запятыми:
char ch, init, ans;
5. В операторе объявления переменную можно инициализировать:
float mass = 6.0Е24;4
Справочные материалы 841
Сводка: классы хранения Ключевые слова
auto, extern, static, register, _Thread_local (C11)
Общий комментарий
Класс хранения переменной определяет ее область видимости, связывание и продолжительность хранения. Класс хранения задается как местом ее определения, так и указанными в определении ключевыми словами. Переменные, определенные вне всех функций, являются внешними, имеют область видимости в пределах файла, внешнее связывание и статическую продолжительность хранения. Переменные, определенные внутри какой-то функции, являются автоматическими, если только не использовано одно из других ключевых слов. Они характеризуются областью видимости в пределах блока, отсутствием связывания и автоматической продолжительностью хранения. Переменным, определенным с ключевым словом static внутри функции, присуща область видимости в пределах блока, отсутствие связывания и статическая продолжительность хранения. Переменные, определенные с ключевым словом static вне функции, имеют область видимости в пределах файла, внутреннее связывание и статическую продолжительность хранения. В стандарте С11 появился новый квалификатор класса хранения: _Thread_local. Объявленный с этим квалификатором объект имеет потоковую продолжительность хранения, т.е. он существует в течение времени жизни потока, в котором объявлен, и инициализируется, когда поток начинается. Таким образом, объект подобного рода является локальным по отношению к потоку.
Читать дальше