logo
Подбельский Фомин_Программирование на языке СИ_

Программа оценки машинного нуля.

Программа оценки машинного нуля. В вычислительных задачах при программировании итерационных алгоритмов, завершающихся при достижении заданной точности, часто нужна оценка "машинного нуля", т.е. числового значения, меньше которого невозможно задавать точность данного алгоритма. Абсолютное значение "машинного нуля" зависит от разрядной сетки применяемой ЭВМ, от принятой в конкретном трансляторе точности представления вещественных чисел и от значений, используемых для оценки точности. Следующая программа оценивает абсолютное значение "машинного нуля" относительно близких (по модулю) к единице переменных типа float:

В строках программы слева помещены порядковые номера, которых нет в исходном тексте. Номера добавлены только для удобства ссылок на операторы. Строка 1 - комментарий с названием программы. Комментарии в строках 4, 5, 6 поясняют назначение переменных. Объяснить работу программы проще всего с помощью трассировочной таблицы (табл. 2.1).

Во втором столбце таблицы указаны номера строк с исполняемыми операторами. Значения переменных даны после выполнения соответствующего оператора. Только что измененное значение переменной в таблице выделено. После подготовительных присваиваний (строки 6, 7) циклически выполняются операторы 8-11 до тех пор, пока истинно отношение el>1.0, проверяемое в условном операторе. При каждой итерации значение переменной е уменьшается вдвое, и наконец, прибавление (в строке 9) к 1.0 значения е не изменит результата, т.е. el станет равно 1.0.

При использовании компилятора Turbo С получен следующий результат:

При использовании в строке 5 для определения переменных е, el типа double, т.е. при использовании двойной точности, получен иной результат:

Оба результата не хуже значений, приведенных в Приложении 2, для предельных констант FLT_EPSILON и DBL_EPSILON.

Таблица 2.1