Выбрать главу

Имена, приведенные в следующей таблице, взяты из <float.h> и являются константами, имеющими отношение к арифметике с плавающей точкой. Значения (если они есть) представляют собой минимальные значения для соответствующих величин. В каждой реализации устанавливаются свои значения.

FLT_RADIX 2 основание для представления порядка, например: 2, 16
FLT_ROUNDS способ округления при сложении чисел с плавающей точкой
FLT_DIG 6 количество верных десятичных цифр
FLT_EPSILON 1E-5 минимальное х, такое, что 1.0 + х != 1.0
FLT_MANT_DIG количество цифр по основанию FLT_RADIX в мантиссе
FLT_MAX 1E+37 максимальное число с плавающей точкой
FLT_MAX_EXP максимальное n, такое, что FLT_RADIXn-1 представимо
FLT_MIN 1E-37 минимальное нормализованное число с плавающей точкой
FLT_MIN_EXP минимальное n, такое, что 10n представимо в виде нормализованного числа
DBL_DIG 10 количество верных десятичных цифр для типа double
DBL_EPSILON 1E-9 минимальное х, такое, что 1.0 + x != 1.0, где x принадлежит типу double
DBL_MANT_DIG количество цифр по основанию FLT_RADIX в мантиссе для чисел типа double
DBL_MAX 1E+37 максимальное число с плавающей точкой типа double
DBL_MAX_EXP максимальное n, такое, что FLT_RADIXn-1 представимо в виде числа типа double
DBL_MIN 1E-37 минимальное нормализованное число с плавающей точкой типа double
DBL_MIN_EXP минимальное n, такое, что 10n представимо в виде нормализованного числа типа double

Приложение C. Перечень изменений

С момента публикации первого издания этой книги определение языка Си претерпело изменения. Почти все нововведения - это расширения исходной версии языка, выполненные так, чтобы сохранилась совместимость с существующими программами; некоторые изменения касаются устранения двусмысленностей первоначального описания, а некоторые представляют собой модификации, привнесенные существующей практикой. Многие из новых возможностей, впоследствии принятые другими разработчиками Си-компиляторов, были первоначально объявлены в документах, прилагаемых к компиляторам. Комитет ANSI, подготавливая стандарт языка, включил большинство этих изменений, а также ввел другие значительные модификации. Некоторые коммерческие компиляторы реализовали их еще до выпуска официального Си-стандарта.

В этом приложении сведены воедино различия между языком, определенным в первой его редакции, и той его версии, которая принята в качестве стандарта. Здесь рассматривается только сам язык; вопросы, относящиеся к его окружению и библиотеке, не затрагиваются. Хотя последние и являются важной частью стандарта, но, поскольку в первом издании не делалось попытки описать среду и библиотеку, с соответствующими стандартными элементами сравнивать практически нечего.

• В стандарте более тщательно, по сравнению с первым изданием, определено и расширено препроцессирование: в его основу явно положены лексемы; введены новые операторы для "склеивания" лексем (##) и создания символьных строк (#), а также новые управляющие строки, такие как #elif и #pragma; разрешено повторное определение макроса с той же последовательностью лексем; отменена подстановка параметров внутри строк. Разрешено "склеивание" строк с помощью знака \ в любом месте, не только в строках и макроопределениях (см. A.12).

• Минимальное число значимых символов всех внутренних идентификаторов доведено до 31; для идентификаторов с внешней связью оно остается равным 6; буквы нижнего и верхнего регистров не различаются. (Многие реализации допускают большее число значимых символов.)

• Для знаков #, \, ^, [, ], {, }, |, ~, которых может не быть в некоторых наборах символов, введены трехзнаковые последовательности, начинающиеся с ?? (см. A12.1). Следует заметить, что введение трехзнаковых последовательностей может повредить значения строк, в которых содержатся ??.