Главная страница «Первого сентября»Главная страница журнала «Информатика»Содержание №21/2008


В мир информатики
Эксперименты

Проверка факта двоичного представления чисел в компьютере

Из уроков информатики известно, что в компьютере данные хранятся и обрабатываются в двоичной системе счисления. А действительно ли это так? В собственных программах, в электронной таблице Microsoft Excel и в других случаях мы вводим десятичные числа и получаем на экране десятичный результат. Можем ли мы быть уверенными, что компьютер производил действия именно в двоичной системе? Как это проверить?

Чтобы убедиться в этом, давайте проведем небольшой эксперимент.

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

алг Проверка_двоичного_представления_чисел

нач цел m, n, i, вещ h, sum

m := 128

вывод нс, " n Разность"

нц для n от m - 1 до m + 1

h := 1/n

sum := 0

нц для i от 1 до n

sum := sum + h

кц

вывод нс

вывод n, " ", sum - 1

кц

кон

Прокомментируем ее. “Наружный” оператор цикла с параметром n обеспечивает троекратное исполнение программы для значений n от m – 1 до m + 1 (в нашем случае это 127, 128 и 129). Нетрудно заметить, что речь идет о числе, являющемся точной степенью двойки (т.е. 128) и двух “соседних”. Далее для каждого из трех чисел n раз происходит суммирование величины 1/n и печатается разность, показывающая, насколько полученное число (по сути, равное n * 1/n) отличается от 1. Запустив программу, мы увидим на экране следующий результат

n Разность

127 …

128 0.0000000000Е+00

129 …

Если вы подготовите аналогичную программу на известном вам языке программирования, то увидите, что только для числа 1/128 результат тождественно равен нулю. А вот для двух других чисел результат получился хоть и маленький, но ненулевой! Почему? Все дело в том, что число 1/128 представляется в двоичной системе точно, а числа 1/127 и 1/129 — нет.

Может быть, это случайность? Проверьте это для других значений m, например, 512 или 2048. В то же время, при m = 126 все три результата будут отличными от нуля, т.е. степени двойки действительно являются “особенными”.

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

Задание для самостоятельной работы

Определите значения разности, указанной в комментариях к программе, для чисел 127, 129 и троек чисел, “в центре” которых находятся числа 512, 2048 и 126. Определите также (без использования программы), как в двоичной системе выглядит число 1/128. Ответы, пожалуйста, присылайте в редакцию. Фамилии всех приславших правильные ответы будут опубликованы.

Литература

1. Еремин Е.А. Популярные лекции об устройстве компьютера. СПб.: БХВ-Петербург, 2003.


4 Говорят, что до этой уловки в ответ на предложение учителя найти сумму всех целых чисел от 1 до 100 додумался выдающийся математик XIX века Карл Гаусс, когда ему было девять лет.

TopList