Теоретические основы информатики

Ошибки, связанные с конечной разрядностью арифметики

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

  • левые цифры результата, выходящие за отведенное количество разрядов, оказываются утерянными;
  • при сложении двух положительных чисел, представленных в знаковом типе данных, мы можем получить отрицательное число, если в результате сложения в левом знаковом разряде окажется единица.

Выполним сложение 100 и 51 в 8-разрядном знаковом типе. В 8-разрядном компьютерном представлении эти числа имеют следующий вид:

100 = 011001002 и 51 = 001100112.

При сложении этих чисел получим 100101112. Первая единица (знаковый разряд) указывает на то, что в остальных разрядах получено отрицательное число. Получим теперь значение данного отрицательного числа по его дополнительному коду. Оно в итоге равно -105.

Таким образом, 100 + 51 = -105 в 8-разрядной знаковой арифметике.

Вычислим значения факториала в широко распространенном знаковом 16-разрядном типе (int Turbo-Pascal). Значение:

7! = 1·2·3·4·5·6·7 = 5250 = 1010010000010210002

уместится в 16-ти разрядах, а значение:

8! = 7!·8 = 10100100000102·10002 = 10100100000100002

в 16-ти разрядах уже не уместится. Для записи этого числа требуется как минимум 17 разрядов в знаковом типе. При записи значения 8! в 16 разрядов самая старшая (значащая) единица попадает в знаковый разряд и трактуется как знак отрицательного числа. Таким образом, получившееся значение соответствует отрицательному числу -25216.

Следует заметить, что и в 32-разрядном целом типе возможно получить только значение 12!, а для 13! результат будет неверным, хотя полученное в 32-разрядной знаковой арифметике число окажется положительным: 1 932 053 504. При умножении 12! на 13 результат содержит 33 значащих двоичных цифры, то есть самая левая единица в 32-разрядной арифметике оказывается утерянной, а вторая слева цифра равна 0, что и определяет положительный знак результата такого умножения в знаковом типе. Полученное положительное значение может ввести в заблуждение: в случае отрицательного результата его ошибочность очевидна, а в данном случае — нет.

content

Share
Published by
content

Recent Posts

Магнитное поле тока. Магнитные силовые линии

Разница между энергией электрического поля и энергией магнитного поля примерно такая же, как между энергией,…

12 месяцев ago

Постоянные магниты

Когда-то легендарный пастух Магнес, нашел природный магнитный камень, притягивающий железо. В последствии этот камень назвали магнетит или магнитный…

12 месяцев ago

Соединение конденсаторов

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

12 месяцев ago

Обозначение конденсаторов

Обозначение конденсаторов на схемах определено ЕСКД ГОСТ 2.728-74. Обозначения условные графические в схемах. Резисторы, конденсаторы. Итак,…

1 год ago

Виды конденсаторов

Узнав, что же такое конденсатор, рассмотрим, какие бывают виды конденсаторов. Итак, виды конденсаторов можно классифицировать по…

1 год ago

Энергия поля конденсатора

Вся энергия заряженного конденсатора сосредотачивается в электрическом поле между его пластинами. Энергию, накоп­ленную в конденсаторе, можно определить…

1 год ago