Читать «Эффект плато. Как преодолеть застой и двигаться дальше» онлайн - страница 28

Боб Салливан

Затем он попробовал цифру «5»… И – ура! – игра ее приняла!

Однако фактически программный код означал: «Значение параметра должно быть меньше или равно пяти».

В большинстве языков программирования разница между этими формулами состоит в одном-единственном нажатии на клавишу.

Итак, теперь игра шла на неизведанной территории, в систему было введено непредвиденное значение пять. Затем Хью снова переключил свое внимание на сенсорный экран и нажал кнопку «+», которая, к его «ботаническому» восторгу, позволила увеличить значение до «6»! Возможно, логика, которая прежде не позволяла ему ввести значение выше предельного, формулировалась так: «При значении, равном четырем, не увеличивать». В данном случае значение составляло не четыре, а пять, поэтому нажатие кнопки «+» позволило успешно повысить его до шести. Хью открыл упаковку арахиса и принялся нажимать кнопку «+» до тех пор, пока значение не достигло 127. Тут он решил остановиться и поразмышлять.

Число 127 играет особую роль в компьютерных науках. По сути, это своего рода плато. С технической точки зрения это два в седьмой степени минус единица (27 − 1). В некоторых случаях это максимальное значение, с которым может справиться определенная система. Чтобы понять, почему это так, подумайте о ситуациях, когда вы используете для счета собственные пальцы. Давайте предположим, что вы считаете привычным образом, то есть ваши выпрямленные шесть пальцев означают цифру «6». Если, используя этот метод, вы попытаетесь посчитать более чем до десяти, то столкнетесь с проблемой – количество ваших пальцев ограниченно. Дети обычно стараются запомнить, что уже прошли этот цикл один раз, и затем вновь начинают выпрямлять пальцы, но первый из них означает уже не 1, а 11. Однако представьте себе, что вам нужно отправить кому-то фотографию ваших пальцев. В этом случае вы не можете показать на фотографии 12 или 13, потому что на картинке это будет выглядеть как два или три. Эта проблема возникает, поскольку на уровне десяти мы достигли предельного значения для пальцев, а добавляя к нему что-то еще, мы сталкиваемся с тем, что специалисты по компьютерным наукам называют целочисленным переполнением. Иными словами, мы попытались сохранить больше информации, чем можно. При использовании пальцев, для того чтобы посчитать до 11, мы, доходя до максимального значения (10), «возвращаемся» к минимальному значению – в случае с пальцами это означает 1. Такая же проблема возникает и в программах, где для хранения числа используется набор так называемых бинарных переключателей («вкл/выкл»). Когда число превышает совокупную емкость переключателей, программа просто перегружает значение до минимально допустимого. Представьте себе, что вы считаете от 1 до 100, но при этом видите только последнюю цифру в каждом числе. Может показаться, что вы движетесь от 0 до 9, а затем вдруг опять к 0. Когда подобное явление происходит в области программирования, оно способно привести к всевозможным проблемам.