Число 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), хотя доказательство не было предоставлено. Более того, было доказано, что 3,203,431,780,337 является простым числом в 1867 году. [4]
Число 2,147,483,647 (или шестнадцатеричное 7FFFFFFF 16 ) является максимальным положительным значением для 32-битного знакового двоичного целого числа в вычислениях . Следовательно, это максимальное значение для переменных, объявленных как целые числа (например, как int
) во многих языках программирования.
Тип данных time_t , используемый в операционных системах, таких как Unix , представляет собой знаковое целое число, подсчитывающее количество секунд с начала эпохи Unix ( полночь UTC 1 января 1970 года), и часто реализуется как 32-битное целое число. [8] Самое позднее время, которое может быть представлено в этой форме, это 03:14:07 UTC во вторник, 19 января 2038 года (что соответствует 2 147 483 647 секундам с начала эпохи). Это означает, что системы, использующие 32-битный time_t
тип, подвержены проблеме 2038 года . [9]
1 января 2022 года была обнаружена ошибка в системах Microsoft Exchange , из-за которой доставка электронной почты невозможна. Внутренний сканер вредоносных программ (включенный по умолчанию с 2013 года) использовал дату и время как знаковое 32-битное целое число. В течение нового года это число изменится до 2 201 010 001 (первые две цифры будут представлять год), что превысит максимальное значение для этого типа данных. [10]
Число 2 147 483 647 часто становится жестким пределом для различных статистических данных в видеоиграх, таких как очки или деньги, если они представлены 32-битными целыми числами со знаком (а не числами с плавающей точкой , двойной точностью или произвольной точностью ). [11] [12] Превышение этого предела законными способами или путем модификации или взлома игры приводит к множеству различных результатов, вызванных переполнением целых чисел . [13] Наиболее распространенным результатом является «переход» числа в отрицательные числа. Другим потенциальным результатом является сбой игры , что означает, что не было реализовано отказоустойчивости в случае, если значение превышает 32-битный предел со знаком — как правило, если базовый движок имеет неопределенное поведение вместо поведения переполнения целых чисел. Известным примером в видеоиграх является Old School RuneScape и Grand Theft Auto V , где число используется как максимальное количество монет (или любого другого предмета), которое игрок может держать одновременно с помощью обычных методов, известное как «максимальный кэш-стек». [14] [15] В подобных случаях, когда вместо знакового 32-битного целого числа используется беззнаковое , предел может быть увеличен до 4 294 967 295. [11] Другим известным примером является жесткий лимит Minecraft для путешествий . Игра вылетает при попытке путешествия за эту точку, и игровой рендеринг останавливается примерно в 147 блоках после этой точки. [16]
величайший.
целесообразно проверить, что расчет не превышает максимальный предел целых чисел языка игры (2,1 миллиарда). К сожалению, логика, использованная для этого расчета, была неверной, и при выполнении на стопках других предметов (не на самом мешочке) результатом было преобразование стопки в 2,1 млрд монет.