Особенности чисел с плавающей (Мини-учебник с ejudge = Чернокнижка)
Описание файла
Файл "Особенности чисел с плавающей" внутри архива находится в папке "Мини-учебник с ejudge = Чернокнижка". PDF-файл из архива "Мини-учебник с ejudge = Чернокнижка", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Учебные материалы для 2 курсаГлавная страницаЗанятия по языку СиЗанятия попрограммированию вUnixМатериалы длядополнительного чтенияКонспекты занятий поязыку Си++Опции компилятора насервере (C)Опции компилятора насервере (C++)Стиль форматированияпрограммО вещественных числахО рекурсивном спускеО написании MakefileЗадание намоделирование кешаДокументация по STLСсылкиПамятка по работе в UnixЛекции по ОС для КазФМГУОсобенности чисел с плавающейточкойМножество значений, представимых в типах float, double иlong double кроме обычных конечных значений содержит триспециальных значения NaN, -Inf, Inf.Значение NaNЗначение NaN (NotaNumber) используется для того, чтобысигнализировать о том, что результат некоторой операции неможет быть вычислен изза неопределенностей различногорода.Например, операция 0.0/0.0 даст результатом NaN.На самом деле в вещественных типах представимо целоесемейство значений NaN, дополнительная информация оконкретном NaNзначении может быть использована как кодошибки.Все функции перевода из строкового представления ввещественное значение, такие как *scanf, strtod и т. п.распознают строку NAN (независимо от регистра букв) ивозвращают значение NaN.Все функции перевода из вещественного значения в строковоепредставление, такие как *printf распознают значение NaN ивыводят его в виде строки nan.Результат операции с числами с плавающей точкой, такой каксложение, умножение и т. д. равен NaN, если один изаргументов операции равен NaN.Если один из операндов операции сравнения равен NaN,операции сравнения дают следующий результат:==0!=1< 0<=0> 0>=0Чтобы проверить вещественное значение на принадлежность кклассу NaN можно использовать функции fpclassify илиisnan.#include <math.h>//...if (fpclassify(value) == FP_NAN) {// значение value является NaN}// или другой вариантif (isnan(value)) {// значение value является NaN}В силу свойств значения NaN мы будем полагать, чтопоследовательность чисел с плавающей точкой не может бытьупорядочена, если в ней содержится элемент NaNЗначения -Inf, InfЭти значения представляют результат "бесконечность"который может возникать при выполнениях различныхопераций с плавающей точкой.Например, 1.0/0.0 дает результат Inf, а -1.0/0.0 даетрезультат -Inf.Все функции перевода из строкового представления ввещественное значение, такие как *scanf, strtod и т. п.распознают строку [+|-]INF (независимо от регистра букв) ивозвращают значение Inf с соответствующим знаком.Все функции перевода из вещественного значения в строковоепредставление, такие как *printf распознают значение Inf ивыводят его в виде строки inf с соответствующим знаком.Значения Inf, -Inf в операциях сравнения ведут себяестественным образом, например, следующие условияистинны:inf == inf!(inf != inf)inf >= infinf <= inf!(inf > inf)!(inf < inf)Значение Inf больше любого конечного значения, а значение Inf меньше любого конечного значения.Однако, обратите внимание, что!(inf - inf == 0)Так как inf - inf дает в результате NaN.Чтобы проверить вещественное значение на принадлежность кклассу Inf можно использовать функции fpclassify илиisinf.#include <math.h>//...if (fpclassify(value) == FP_INFINITE) {// значение value является Inf (любого знака)}// или другой вариантif (isinf(value) < 0) {// значение value является -inf}if (isinf(value) > 0) {// значение value является +inf}Отрицательный 0Множество значений вещественных чисел содержит два нуля:положительный и отрицательный. Когда в результатенекоторых вычислений (например, при умножении илиделении) получается нулевой результат, его знак вычисляетсяпо обычным правилам и сохраняется. Поэтому в результатеможет получиться как обычное значение 0.0, так иотрицательное -0.0. Эти значения равны друг другу и,соответственно, больше всех отрицательных чисел и меньшевсех положительных чисел.Если при операции деления делитель равен нулю, то его знакучитывается при вычислении знака получающейсябесконечности. Таким образом, 1.0/-0.0 == -inf, -1.0/-0.0== inf.Last modified: Friday, 21Jun2013 16:47:24 MSK Alexander Chernov.