Представление чисел в системах с плавающей запятой

Погрешности вычислений

Содержание

 

 

1.1. Перевод чисел из одной системы счисления в другую.. 2

1.2. Представление чисел в системах с плавающей запятой. 2

1.3. Оценки погрешности. 3

1.4. Машинный эпсилон. 3

1.5. Погрешности вычисления значений функций. 4

1.6. Примеры неустойчивости алгоритмов. 5

1.7. Пример Уилкинсона. 5


1.1. Перевод чисел из одной системы счисления в другую

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

Пример 1.1. Найдем двоичное представление числа . Выполняя описанный алгоритм, находим последовательность чисел:

.

Следовательно, двоичное представление числа имеет вид: .

Пример 1.2. Найдем двоичное представление числа . Последовательно находим:

.

Далее процесс повторяется. Получаем, что данное число в двоичной системе описывается бесконечной, периодической дробью . В скобках записан период дроби. Следовательно, при использовании двоичной дроби конечной длины возникает ошибка округления. Например, . При большом количестве знаков ошибка округления мала, но она всегда присутствует.

 

Представление чисел в системах с плавающей запятой

 

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

  • основанием ,
  • длиной мантиссы (точностью) ,
  • пределами изменения показателей .

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

,

где число в круглых скобках – дробная часть – мантисса, p – порядок числа .

Система с плавающей запятой называется нормализованной, если для каждого ненулевого числа .

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

.

Числа расположены неравномерно на оси чисел. Рассмотрим пример нормализованной системы:

.

Все возможные дробные части системы – числа, имеющие порядок :

.

Чтобы получить остальные числа системы, нужно умножить эти дроби на . Получим числа от до 3.5. Все положительные числа системы показаны на рис. 1.1.

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

 

Рассмотрим пример. Сложим три числа: . Рассмотрим два варианта объединения слагаемых: и .

1) ; прибавив к этому , получим точный ответ: .

2) . Такого числа нет в системе – требуется округление. Возможны два

варианта: округление до большего и округление до меньшего

а) Округляем до большего: . Прибавив , вновь получаем число, которого нет в системе: . Вновь округляя до большего, получаем неверный ответ: сумма равна 1.0.

б) При округлении до меньшего полагаем . Прибавив , опять получим число, которого нет в системе: . В соответствии с выбранным правилом округления до меньшего отбрасываем последний разряд и вновь получаем неверный результат: .

Получили, что в нашей системе от перемены мест слагаемых сумма меняется!

 

Оценки погрешности

 

Пусть a – точное значение некоторой величины, a* – ее приближенное значение. Абсолютная погрешность приближенного значения равна . Поскольку точное значение a обычно неизвестно, то задача состоит в нахождении оценки абсолютной погрешности , которая удовлетворяет неравенству – оценка не должна быть меньше истинной погрешности.

Относительная погрешность определяется отношением: . Для оценки абсолютной величины относительной погрешности должно выполняться неравенство:

.

Значащими цифрами числа называются все цифры в его записи, начиная с первой ненулевой слева. В нормализованной системе все цифры – значащие.

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

 

Машинный эпсилон

 

Пусть имеется двоичная нормализованная система с t разрядами. Пусть точное значение числа a представляет собой бесконечную двоичную дробь с экспоненциальным множителем:

.

Пусть приближенное значение получается в результате усечения – отбрасывания всех разрядов, начиная с -го:

, –

тогда абсолютная ошибка равна

.

В нормализованной системе

.

Следовательно, относительная ошибка удовлетворяет неравенству:

.

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

.

Отсюда следует, что точное число и соответствующее ему округленное число связаны равенством:

, где .

Число называется машинный эпсилон. Машинный эпсилон характеризует точность арифметики с плавающей запятой.

Машинный эпсилон определяют как наименьшее число , такое, что .

Один из вариантов оценки числа на языке пакета Mathematica:

For[ep=1.,1.+ep>1.,ep=ep/2];2 ep

Исходное число ep=1. делится многократно пополам до тех пор, пока не будет нарушено условие На печать выводится удвоенный результат последнего деления .

Отметим, что в библиотеках языка Си имеются встроенные значения машинного эпсилон для формата float: FLT_EPSILON= и для формата double: DBL_EPSILON= .