Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методы вычислений в классах языка С++.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
3.08 Mб
Скачать

0.3. Особенности машинных вычислений

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

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

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

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

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

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

  • ошибки дискретизации непрерывных зависимостей:

  • погрешности в задании исходных данных;

  • погрешности моделирования зависимости между исходными данными и вычисляемыми переменными;

  • методические погрешности, определяемые несовершенством вычислительных алгоритмов;

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