Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Тут можно читать онлайн Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература, издательство Вильямс, год 0101. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать книгу онлайн бесплатно, автор Стивен Прата
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Макросы FLT_HAS_SUBNORM, DBL_HAS_SUBNORM и LDBL_HAS_SUBNORM из float.h характеризуют, каким образом реализация обрабатывает субнормальные значения. Ниже перечислены возможные значения для этих макросов и объяснен их смысл:

-1 неопределимо (непротиворечивой интерпретации не существует)

0 отсутствует (реализация могла бы, например, заменять субнормальные значения нулем)

1 присутствует

906 Приложение Б

Библиотека math.h предлагает средства, в том числе макросы fpclassifyt) и isnormal(), которые позволяют идентифицировать, когда программа генерирует субнормальные значения, таким образом, теряя точность.

Схемы оценки

Макрос FLT_EVAL_METHOD из float.h отражает схему, которую реализация применяет для оценки выражений с плавающей запятой. Возможные варианты описаны ниже:

-1 неопределимо

0 оценка операций и констант в диапазоне и точности их типа

1 оценка операций и констант типов float и double в диапазоне и точности типа double, а операций и констант типа long double в диапазоне и точности типа long double

2 оценка операций и констант всех типов с плавающей запятой в диапазоне и точности типа long double

Реализации разрешено предоставлять дополнительные отрицательные значения для обозначения других вариантов.

Предположим для примера, что программа умножает два значения float, присваивая результат переменной float. При варианте 1, который был выбран в K&R С, два значения float расширялись до double, вычисление производилось с использованием double, а результат округлялся до float при присваивании.

При варианте 0, который выбран в ANSI С, два значения float умножаются как float и затем выполняется присваивание результата. Это может быть более быстрой операцией, чем вариант 1, но здесь есть вероятность небольшой потери точности.

Округление

Макрос FLT ROUNDS из float.h описывает то, каким образом система обрабатывает округление. Ниже перечислены возможные варианты округления:

-1 неопределимо

0 в сторону пуля

1 к ближайшему значению

2 в сторону положительной бесконечности

3 в сторону отрицательной бесконечности

В системе с другими вариантами могут быть определены дополнительные значения.

В некоторых системах предлагается возможность управления схемой округления, и в таком случае функция fesetround() из fenv.h предоставляет программный контроль.

Побочные эффекты разных методов округления, вероятно, не будут особенно важны, если вы подсчитываете объем муки для 37 пирожных, но они могут повлиять, скажем, в случае проведения важных финансовых и научных вычислений. Понятно, что метод округления вступает в игру, когда выполняется преобразование значения с плавающей запятой высокой точности в значение меньшей точности, например, во время присваивания результата вычисления double переменной float. Метод округления может быть также задействован при изменении основания системы счисления. Дробная часть с точным представлением в одной системе счисления может не иметь точного представления в другой системе счисления.

Справочные материалы 907

Взгляните на следующий код: float х = 0.8;

Дробь 8/10, или 4/5, может быть точно представлена в системе по основанию 10. Но большинство компьютерных систем будут хранить результат по основанию 2, а в двоичной системе счисления 4/5 дает бесконечную дробь:

0.1100110011001100...

Таким образом, при сохранении в х величина 0.8 округляется до приближенного значения, которое может зависеть от метода округления.

Однако может случиться так, что конкретная реализация не удовлетворяет требованиям IEC 60559; например, из-за того, что имеющееся оборудование на подобное не рассчитано. По этой причине в С99 определены два макроса, которые могут применяться в директивах препроцессора для проверки соответствия. Во-первых, макрос

_ STDC_IEC_559

условно определен как константа 1, если реализация отвечает спецификациям плавающей запятой IEC 60559. Во-вторых, макрос

_ STDC_IEC_559_COMPLEX

условно определен как константа 1, если реализация придерживается совместимой с IEC 60559 арифметики комплексных чисел.

Если в реализации эти макросы не определены, значит, нет никакой гарантии совместимости с IEC 60559.

Заголовочный файл fenv.h

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

Флаги состояния и управляющие режимы имеют смысл, только если их поддерживает оборудование. Например, вы не можете изменить метод округления, если оборудование не позволяет этого делать.

Чтобы включить поддержку режимов и флагов, используется следующая директива препроцессора:

#pragma STDC FENV_ACCESS ON

Поддержка остается включенной до тех пор, пока программа не достигнет конца блока, содержащего прагму, либо, если прагма является внешней, то до конца файла или единицы трансляции. Для отключения поддержки применяется такая директива:

#pragma STDC FENV_ACCESS OFF

Можно также записать следующую прагму:

#pragma STDC FENV_ACCESS DEFAULT

Это восстановит стандартное состояние компилятора, которое зависит от реализации.

908 Приложение Б

Данное средство важно для тех разработчиков, которые имеют дело с критически важными вычислениями с плавающей запятой, но представляет ограниченный интерес для большинства пользователей, поэтому здесь мы не будем вдаваться в особые детали.

прагма stdc fp_contract

Некоторые процессоры с плавающей запятой могут объединять выражения с плавающей запятой, содержащие множество операций, в единую операцию. Например, процессор может быть в состоянии выполнить оценку следующего выражения за один шаг:

х*у - Z

Это увеличивает скорость вычислений, но может привести к снижению их предсказуемости. Прагма STDC FP CONTRACT позволяет включать и отключать данное средство. Стандартное состояние зависит от реализации.

Чтобы отключить это средство сжатия для определенного вычисления, а затем включить его снова, можно поступить так:

#pragma STDC FP_CONTRACT OFF

val = x * у - z;

#pragma STDC FP_CONTRACT ON

дополнения библиотеки math.h

В математической библиотеке С90 функции по большей части объявлены с аргументами double и типом возвращаемого значения double:

double sin(double);

double sqrt(double);

Библиотеки C99 и СП предоставляют версии float и long double для всех этих функций. Имена такие функций содержат суффиксы f и 1:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

Стивен Прата - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C. Лекции и упражнения (6-е изд.) 2015 отзывы


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x