Листинг 3.6. Программа altnames.c

100 Глава 3
В финальном вызове функции printf() аргумент PRId32 заменяется своим определением "d" из файла inttypes.h, в результате чего строка принимает такой вид:
printf("me32 = %" "d" "\n", me32);
Однако С объединяет последовательно идущие строки в кавычках в одну строку в двойных кавычках, давая в результате следующую строку:
printf("mel6 = %d\n", mel6);
Ниже показан вывод программы; обратите внимание, что в рассматриваемом примере также используется управляющая последовательность \" для отображения двойных кавычек:
Сначала предположим, что int32_t является int: me32 = 45933945 Далее не будем делать никаких предположений.
Вместо этого воспользуемся "макросом" из файла inttypes.h: me32 = 45933945
В этом разделе не ставится цель изучить все расширенные целочисленные тины. Намерение скорее состоит в демонстрации наличия этого уровня управления типами на тот случай, если он потребуется. Подробное описание заголовочных файлов inttypes.h и stdint.h приведено в справочном разделе VI приложения Б.
НА ЗАМЕТКУ! Поддержка С99/С11
Несмотря на то что язык С перешел на стандарт С11, даже средства стандарта С99 разработчики компиляторов внедряли в разном темпе и с отличающимися приоритетами. На момент написания этой книги в некоторых компиляторах еще не были реализованы заголовочный файл inttypes.h и связанные с ним возможности.
Типы float, double И long double
Разнообразные целочисленные типы нормально подходят для большинства проектов по разработке программного обеспечения. Тем не менее, ориентированные на математику и финансы программы часто оперируют числами с плавающей запятой. В языке С такие числа имеют тип float, double или long double. Они соответствуют данным вещественного типа в языках программирования FORTRAN и Pascal. Как упоминалось ранее, числа с плавающей занятой позволяют представлять намного больший диапазон чисел, включая десятичные дроби. Представление чисел с плавающей запятой подобно научной форме записи, которая применяется для выражения очень больших и очень маленьких чисел. Давайте рассмотрим такую форму записи.
В научной форме записи числа представляются в виде десятичных чисел, умноженных на степень числа 10. Рассмотрим несколько примеров.

В первом столбце показана обычная форма записи числа, во втором столбце — научная форма записи, а в третьем — экспоненциальная форма записи, которая представляет собой научную форму записи, обычно используемую при работе с компьютерами, при этом за обозначением е следует показатель степени 10. На рис. 3.7 приведено еще несколько примеров чисел с плавающей запятой.
Данные в языке С 101
Стандарт языка С требует, чтобы тип float был способен представлять минимум шесть значащих цифр и охватывал диапазон значений, по меньшей мере, от 10~ этдо 10 +:Н Первое требование означает, что тип float должен представлять, как минимум, первые шесть цифр такого числа, как 33.333333. Второе требование по достоинству оценят те, кто оперирует такими величинами, как масса Солнца (2.0е30 килограмм), электрический заряд протона (1.6е-19 кулона) или сумма государственного долга. Часто для хранения чисел с плавающей запятой системы используют 32 бита. Восемь битов отводятся под значение экспоненты и ее знака, а остальные 24 бита служат для представления не- эксионенциальной части числа, которая называется мантиссой или значащей частью числа, и ее знака.
Для представления чисел с плавающей запятой язык С предлагает также тип double (обеспечивающий двойную точность). Тип double имеет те же требования к минимальному диапазону возможных значений, что и float, но поддерживает более высокое минимальное количество значащих цифр — 10. В типичных представлениях типа double применяются 64 бита, а не 32. В некоторых системах все 32 дополнительных бита используются для неэкспоненциальной части. Это приводит к увеличению количества значащих цифр и сокращению ошибок, связанных с округлением. В других системах часть этих битов используется для размещения большей экспоненты, благодаря чему расширяется диапазон возможных значений. Любой из этих подходов обеспечивает, как минимум, 13 значащих цифр, что более чем удовлетворяет минимальному требованию стандарта.
Читать дальше