Число 2 147 483 647 — восьмое простое число Мерсенна , равное 2 31 − 1. Это одно из четырёх известных двойных простых чисел Мерсенна . [1]
Простота этого числа была доказана Леонардом Эйлером , который сообщил о доказательстве в письме Даниэлю Бернулли, написанном в 1772 году. [ 2] Эйлер использовал пробное деление , усовершенствовав метод Пьетро Катальди , так что требовалось не более 372 делений. [3] Таким образом, оно улучшило предыдущий рекорд простого числа 6 700 417, также открытого Эйлером сорок лет назад. Число 2 147 483 647 оставалось самым большим известным простым числом до 1867 года. [4]
В вычислениях это число является наибольшим значением, которое может содержать 32-битное целочисленное поле со знаком .
На момент открытия 2 147 483 647 было самым большим известным простым числом . В 1811 году Питер Барлоу , не предвидя будущего интереса к совершенным числам , писал (в «Элементарном исследовании теории чисел »):
Эйлер установил, что 2 31 − 1 = 2147483647 — простое число; и это самое большое из известных в настоящее время таковых, и, следовательно, последнее из вышеупомянутых совершенных чисел [т. е. 2 30 (2 31 - 1)], которое зависит от этого, является величайшим совершенным числом, известным в настоящее время, и, вероятно, величайшее из когда-либо открытых; поскольку они просто любопытны, но не приносят пользы, маловероятно, что кто-либо попытается найти что-то за пределами этого. [5]
Это предсказание он повторил в своей работе 1814 года «Новый математический и философский словарь» . [6] [7]
Фактически, большее простое число было обнаружено в 1855 году Томасом Клаузеном (67 280 421 310 721), хотя доказательство не было предоставлено. Более того, в 1867 году было доказано, что 3 203 431 780 337 является простым. [4]
Число 2 147 483 647 (или шестнадцатеричное 7FFFFFFFF 16 ) является максимальным положительным значением для 32-битного двоичного целого числа со знаком в вычислениях . Следовательно, это максимальное значение для переменных, объявленных как целые числа (например, как int
) во многих языках программирования. Внешний вид числа часто отражает ошибку, состояние переполнения или отсутствие значения. [8]
Тип данных time_t , используемый в таких операционных системах, как Unix , представляет собой целое число со знаком, отсчитывающее количество секунд с начала эпохи Unix ( полночь по всемирному координированному времени 1 января 1970 года), и часто реализуется как 32-битное целое число. [9] Самое позднее время, которое можно представить в этой форме, — 03:14:07 UTC во вторник, 19 января 2038 г. (что соответствует 2 147 483 647 секундам с начала эпохи). Это означает, что системы, использующие 32-битный time_t
тип, подвержены проблеме 2038 года . [10]
1 января 2022 года было сообщено об ошибке в системах Microsoft Exchange , из-за которой не удавалось доставить электронную почту. Внутренний сканер вредоносных программ (включенный по умолчанию с 2013 года) использовал дату и время как 32-битное целое число со знаком. В течение нового года целое число изменится на 2 201 010 001 (первые две цифры обозначают год), превысив максимальное значение для этого типа данных. [11]
Число 2 147 483 647 часто становится жестким пределом для различных статистических данных в видеоиграх, таких как очки или деньги, если они представлены 32-битными целыми числами со знаком (а не числами с плавающей запятой , двойной точности или произвольной точности ). [12] [13] Превышение этого предела законными способами, модификацией или взломом игры приводит к множеству различных результатов, вызванных переполнением целых чисел . [14] Наиболее распространенным результатом является «заворачивание» числа в отрицательные числа. Другим потенциальным результатом является сбой игры , что означает, что не было реализовано отказоустойчивое решение в случае, если значение превышает знаковый 32-битный предел — обычно, если базовый движок имеет неопределенное поведение вместо поведения переноса для целочисленного переполнения. Хорошо известным примером в видеоиграх является Old School RuneScape и Grand Theft Auto V , где число используется как максимальное количество монет (или любого другого предмета), которое игрок может удерживать одновременно обычными методами, известными как «максимальный денежный стек». [15] [16] В аналогичных случаях, когда используется 32-битное целое число без знака вместо знака, предел может быть расширен до 4,294,967,295 . [12]
величайший.
уместно проверить, что вычисление не выходит за пределы максимального целочисленного предела языка игры (2,1 миллиарда). К сожалению, логика, использованная для этого расчета, была неверной, и при выполнении на стопках других предметов (а не на самом мешочке) результатом было преобразование стопки в 2,1 миллиарда монет.