Еще 1970-х годах для хранения времени в операционных системах программистами был выбран простой и удобный способ — использование целого числа в расчетах (вместо неудобных дней, минут, секунд), которое бы показывало сколько секунд прошло с определенной даты. И этой датой было выбрано 1-е января 1970 года. Применяется этот способ до сих пор, в результате чего порой могут возникать ошибки. Как, например, в оригинальной версии игры «Civilization», когда Ганди оказывался сволочью и объявлял войны всем из-за снижения уровня агрессии до значений ниже 0, когда уровень агрессии прокручивался и резко становился максимальным.

И если в 4-х битах максимальное число, записанное в двоичной системе — 15:

0000 — 0,
0001 — 1,
0010 — 2,
0011 — 3,
............,
1111 — 15.

И после 15, значение прокручивается в результате переполнения целого и снова возникает 0.

То в 64-битной версии ОС — это 18.446.744.073.709.551.615 (при использовании 20 десятичных цифр) и -9.223.372.036.854.775.808 либо +9.223.372.036.854.775.807 при использовании 19 десятичных цифр. И казалось бы, что ошибка с переполнением целого или недополнением, вряд ли возможна. Диапазон довольно большой и позволяет оперировать с огромными значениями.

Но что будет, если на 64-битной ОС телефона Iphone, которая использует те же принципы учета времени, установить время близкое к 1-января 1970-го года?

Правильно, будет довольно занятное видео: «Как убить Iphone за 30 секунд», которое я с удивлением недавно обнаружил на просторах Интернет и которое уже набрало миллионы просмотров:



Впоследствии было найдено и решение и даже немного рассказано о причинах:



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

Комментарии (20)