| В предыдущих примерах мы не упомянули об одной важной проблеме. Дело в том, что любая обсуждаемая в этой книге система представления чисел накладывает определенные ограничения на размер представляемых чисел. Например.при использовании четырехразрядного двоичного дополнительного кода не существует битовой комбинации, представляющей число 9; это означает, что мы не можем получить верный результат при решении задачи Ъ * 4. Фактически при сложении указанных чисел будет получен результат -7. Этот тип ошибок называют переполнением. Они возникают в том случае, когда результат операции по абсолютной величине превышает наибольшее представнмое в выбранном варианте кодировки значение. При использовании двоичного дополнительного кода подобная ошибка может возникнуть при сложении двух положительных или отрицательных чисел. В любом случае ошибку можно выявить путем проверки значения знакового бита результата. Признаком переполнения является отрицательный результат сложения двух положительных чисел или положительный результат сложения двух отрицательных чисел. Безусловно, реальные машины обычно работают с гораздо более длинными битовыми комбинациями, чем те. которые были использованы в наших примерах, и ошибка переполнения, даже при обработке относительно больших чисел, возникает достаточно редко. В настоящее время для хранения чисел в двоичном дополнительном коде обычно применяются битовые комбинации длиной 32 бита, что позволяет без возникновения переполнения обрабатывать числа до 2 147 483 647. Если же требуется обработка чисел, превышающих это значение, можно использовать более длинные битовые комбинации или же просто изменить применяемую единицу измерения. Например, при обработке значений, измеренных в километрах, а не сантиметрах, можно манипулировать меньшими числами, что, возможно, позволит сохранить достаточную точность вычисления. Из сказанного выше следует, что компьютеры также могут ошибаться. Поэтому пользователи должны знать о существовании подобной опасности. Зачастую программисты и пользователи созданных ими приложений бывают слишком самоуверенны и забывают о том. что небольшие числовые значения могут накапливаться, давая в результате очень большие величины. Раньше для представления чисел в двоичном дополнительном коде широко использовались шестнадцатиразрядные двоичные комбинации. Это означало, что переполнение возникало при значениях, превышающих 2*ш - 32 768. Например, 19 сентября 1989 года компьютер в одной из больниц выдал ошибку в расчетах, и это после долгих лет безупречной работы. Была проведена тщательная проверка, которая показала, что к этой дате, начиная с 1 января 1900 года, прошло ровно 32 768 дней. Как вы полагаете, что оказалось причиной ошибки компьютера?
Дата публикации: 23.10.2014 (просмотров: 23653)Комментарии на сайте: |