Зміст публікації

Коли число стає "великим"

У побуті ми оперуємо числами до мільярдів — бюджети держав, відстані між містами, кількість користувачів інтернету. Це звична шкала. Але є цілі галузі, де такі числа — це дрібниця, майже нуль на фоні того, з чим доводиться працювати. У таких випадках використовують калькулятор великих чисел, а довга арифметика у програмуванні застосовується у прикладних задачах. Про це й піде мова далі.

Формально "великим" числом у програмуванні та математиці вважається таке, яке не вміщується у стандартні типи даних процесора. Сучасні 64-розрядні системи зберігають цілі числа до приблизно \(9{,}2 \times 10^{18}\). Здається, багато. Але вже факторіал числа 21 — це \(21! = 51\,090\,942\,171\,709\,440\,000\) — вже не влізає в цей діапазон. А факторіал 100? Це 158-значне число. Факторіал 1000? Вже 2568 цифр. І це ще не межа того, що потрібно математикам і інженерам.

Число Гугол — \(10^{100}\) — дало назву компанії Google. Воно менше, ніж кількість можливих партій у шахах, яку оцінюють приблизно в \(10^{120}\). А у Всесвіті, за оцінками, близько \(10^{80}\) атомів. Деякі числа у математиці змушують Всесвіт виглядати мініатюрним.

Де на практиці потрібні великі числа

Це не суто академічне питання. Великі числа — це інструмент, без якого не працює значна частина сучасних технологій.

Криптографія

Одна з найважливіших і найпоширеніших практичних галузей, де без великих чисел — нікуди. Алгоритм RSA, який захищає більшість HTTPS-з'єднань у світі, базується на множенні двох великих простих чисел і складності зворотної операції — факторизації. Типові ключі RSA-2048 або RSA-4096 оперують числами з сотнями цифр.

Наприклад, відкритий ключ RSA-2048 — це число довжиною 617 десяткових цифр. Щоб розкласти його на множники класичним перебором, знадобилося б більше часу, ніж існує Всесвіт. Саме на цьому і тримається безпека.

Наука і фізика

У квантовій механіці, астрофізиці та фізиці елементарних частинок числа набувають екстремальних значень в обидві сторони — і дуже великих, і дуже малих. Маса електрона — \(9{,}109 \times 10^{-31}\) кг. Маса спостережуваного Всесвіту — приблизно \(10^{53}\) кг. Моделювання фізичних процесів вимагає точних обчислень з такими числами без втрати значущих цифр.

Факторіали і комбінаторика

Задачі перестановок, розкладів, теорії ймовірностей. Скільки способів розсадити 52 гравці за столами покеру? Відповідь — \(52!\), число з 68 цифрами. Такі обчислення зустрічаються в логістиці, генетиці, машинному навчанні (при перебиранні гіперпараметрів) і навіть у музиці — кількість унікальних мелодій скінченна, але астрономічна.

Визначення: що таке число Гугоплекс
Гугоплекс — це \(10^{10^{100}}\), тобто одиниця з гуголом нулів. Це число настільки велике, що навіть якби записати кожну його цифру на окремому атомі, у Всесвіті не вистачило б атомів. Воно існує лише як математична концепція — жоден комп'ютер фізично не може зберегти навіть його десятковий запис.

Що таке довга арифметика

Довга арифметика (або арифметика довільної точності, bignum arithmetic) — це методи і алгоритми для виконання математичних операцій з числами, що перевищують стандартну розрядність процесора. Назва "довга" — пряме відсилання до шкільного методу "довгого ділення" і "довгого множення" в стовпчик, тільки реалізованого програмно.

Ідея проста: замість того, щоб зберігати число в одній комірці пам'яті, ми розбиваємо його на частини і зберігаємо у масиві. Потім операції (додавання, віднімання, множення, ділення) виконуються над цим масивом, з урахуванням переносів між розрядами — так само, як ми рахуємо в стовпчик на папері.

// Приклад: додавання великих чисел як рядків (JavaScript)
function addBigNumbers(a, b) {
 let result = '';
 let carry = 0;
 let i = a.length - 1;
 let j = b.length - 1;

 while (i >= 0 || j >= 0 || carry) {
 const digitA = i >= 0 ? parseInt(a[i--]) : 0;
 const digitB = j >= 0 ? parseInt(b[j--]) : 0;
 const sum = digitA + digitB + carry;
 carry = Math.floor(sum / 10);
 result = (sum % 10) + result;
 }

 return result;
}

console.log(addBigNumbers(
 "99999999999999999999",
 "1"
));
// "100000000000000000000"

Сучасні мови програмування мають вбудовану або бібліотечну підтримку bignum. У Python тип int за замовчуванням підтримує довільну точність — ви можете порахувати 2 ** 1000000 і отримати точну відповідь. У Java є клас BigInteger, у C++ — бібліотеки на кшталт GMP (GNU Multiple Precision Arithmetic Library).

Складність виникає з продуктивністю. Якщо додавання двох bignum-чисел із n цифрами — це \(O(n)\), то множення "в лоб" — вже \(O(n^2)\). Для дуже великих чисел використовують алгоритм Карацуби (\(O(n^{1.585})\)) або перетворення Фур'є (FFT-множення, близьке до \(O(n \log n)\)).

Чому комп'ютер обмежений у розрядності

Це питання глибше, ніж здається. Сучасні процесори — це фізичні пристрої з фіксованою шириною регістрів: 8, 16, 32 або 64 біти. За один такт процесор виконує операцію над числом певного розміру. Це апаратне обмеження, закладене у саму архітектуру.

64-розрядне ціле число може зберігати значення від \(-2^{63}\) до \(2^{63}-1\), тобто приблизно від \(-9{,}2 \times 10^{18}\) до \(9{,}2 \times 10^{18}\). Число з плаваючою точкою (double) за стандартом IEEE 754 має 53 біти мантиси, що дає близько 15-17 значущих десяткових цифр. Все, що виходить за ці межі — переповнення або втрата точності.

Помилка переповнення цілого числа — не теоретична проблема. У 1996 році ракета Ariane 5 зазнала аварії через переповнення 16-розрядного цілого числа при конвертації 64-розрядного числа з плаваючою точкою. Вартість втраченого вантажу — близько 370 мільйонів доларів.

Фіксована розрядність — це компроміс між швидкістю, вартістю заліза і достатністю для більшості задач. Для банківських транзакцій, координат GPS, температур і більшості інженерних розрахунків 64 біти цілком вистачає. Але коли потрібна точність понад 18 знаків або числа з сотнями цифр — включається програмна емуляція через bignum.

Чи може штучний інтелект рахувати великі числа

Це окремо цікаве і неочевидне питання. Мовні моделі на кшталт GPT чи Claude — не калькулятори. Вони не виконують арифметику так, як це робить процесор. Вони передбачають наступний токен на основі патернів із навчальних даних.

На практиці це означає: з простими прикладами — справляється непогано. Попросіть порахувати \(1234 \times 5678\) — є шанс отримати правильну відповідь, бо такі приклади зустрічалися в навчальних даних у різних формах. Але попросіть перемножити два 20-значних числа "в голові" — і точність різко падає. Модель може впевнено написати неправильну відповідь.

  • Мовні моделі не мають вбудованого арифметичного модуля — вони статистично апроксимують результат.
  • Токенізація чисел нелінійна: "123456" може бути розбитий на кілька токенів по-різному.
  • Помилки накопичуються з кожним кроком багатоетапного обчислення.
  • Точність падає зі збільшенням кількості цифр у числах.
  • Сучасні ШІ-системи вирішують це інструментами: підключають Python-інтерпретатор або калькулятор і делегують обчислення туди.

Тобто сам по собі ШІ — поганий калькулятор. Але ШІ з інструментами — вже інша справа. Claude, наприклад, може написати і виконати код на Python, який порахує \(2^{100000}\) точно, бо Python обробляє bignum нативно.

Питання, яке варто обміркувати: а як ШІ розуміє числа взагалі
Для мовної моделі "3" і "три" — це різні токени, але вони асоційовані з одним поняттям через контекст навчання. При цьому "1000000" і "мільйон" теж асоціюються, але арифметичні операції з ними модель не "виконує" у математичному сенсі — вона відтворює патерни. Це принципова різниця між символьним обчисленням і статистичною апроксимацією. Саме тому ШІ може знати теорему Піфагора, але помилитися при конкретному підрахунку.

Практичні задачі з великими числами

Кілька конкретних прикладів, де без довгої арифметики не обійтися.

  1. Генерація RSA-ключів. Потрібно знайти два великих простих числа довжиною 1024+ біт кожне, перемножити їх і виконати ряд операцій у модульній арифметиці. Все це — bignum від початку до кінця.
  2. Обчислення числа Пі з великою точністю. Рекорд на 2024 рік — понад 100 трильйонів цифр після коми. Алгоритм Чудновського, який використовується для цього, вимагає операцій з числами, що мають мільярди цифр.
  3. Криптовалюти і блокчейн. Адреси Ethereum, хеші SHA-256, підписи ECDSA — все це операції над великими числами у полях скінченної характеристики.
  4. Перевірка великих простих чисел. Найбільше відоме просте число станом на сьогодні — число Мерсенна \(2^{136279841} - 1\), знайдене у 2024 році. Воно має понад 41 мільйон цифр.
  5. Точна статистика і фінанси. При обчисленні точних відсотків на великих обсягах транзакцій помилки округлення у float можуть призводити до значних розбіжностей. Банківські системи часто використовують decimal-арифметику з фіксованою точністю.

Великі числа — це не екзотика для математиків-ентузіастів. Це фундамент цифрової безпеки, наукових обчислень і навіть тих банківських транзакцій, які ви здійснюєте щодня. Наступного разу, коли браузер покаже замочок HTTPS, пам'ятайте: за ним стоять числа з сотнями цифр, складні алгоритми модульної арифметики і ціла наука про те, як рахувати те, що не вміщується у жодну комірку пам'яті. А найбільше просте число продовжує зростати — математики й досі шукають наступне. Чи замислювалися ви коли-небудь, наскільки "великим" може бути число, яке ще ніхто не відкрив? Поділіться думками в коментарях.

Рубрика «МАТЕМАТИКА»
2026-03-14 • Перегляди [ 29 ]

Оцінка - 5.0 (1)

 Схожі публікації