Відкрити головне меню

Зміни

нема опису редагування
<big>''Довга арифметика'''&nbsp; — в обчислювальній техніці операції над числами, розрядність яких перевищує довжину [[машинне слово | машинного слова]] даної обчислювальної машини. По суті арифметика з великими числами являє собою набір алгоритмів виконання базових операцій (додавання, множення, зведення в ступінь …) над числами, реалізованими не апаратно, а програмно, використовуючи більш базові апаратні засоби роботи з числами менших порядків. Окремий випадок - '' 'арифметика довільної точності'''&nbsp; — відноситься до арифметики, в якій довжина чисел обмежена тільки об'ємом доступної пам'яті.
 
== Основні споживачі ==
* Комп'ютери низької розрядності, [[мікроконтролер]] и. Наприклад, мікроконтролери серії [[AVR]] мають 8-бітний регістр і 10-бітний [[АЦП]]&nbsp;— так що при обробці інформації з АЦП без довгої арифметики не обійтися.
* [[Криптографія]]. Зокрема довга арифметика застосовується в алгоритмах авторизації по відкритому ключу&nbsp;— таких, як RSA і Diffie-Hellman. З метою запобігання відомих атак, розміри чисел повинні перевищувати 10 <sup> 309 </sup>. Втім досить поширені мови програмування, такі як ISO C і JAVA, вміють працювати тільки з числами, заданої десятковій точності. Зокрема для C99 максимальна довжина вбудованого типу даних long long не перевищує число 10 <sup> 19 </sup>. Втім у деяких інших мовах програмування, таких як Python, є вбудовані бібліотеки роботи з великими числами.
* Математичне та фінансове ПЗ, яке вимагає, щоб результат обчислення на комп'ютері збігся до останнього розряду з результатом обчислення на папері. Зокрема, [[калькулятор Windows]] (починаючи з [[Windows 95]]).
* [[Число з плаваючою комою | Числа з плаваючою комою]]. У комп'ютерах числа з плаваючою комою представлені у вигляді n = [[Sgn | s]] * m * b <sup> x </sup>, де n&nbsp;— саме число, [[Sgn | s]]&nbsp;— [[Sgn | знак числа]], m&nbsp;— [[Експоненціальна запис | мантиса]], b&nbsp;— підстава [[Показова функція | показовою функції]], x&nbsp;— [[показник ступеня]]. При обробці чисел підвищеної точності, розміри мантиси можуть перевищити апаратно допустимі норми. У цих випадках для роботи з мантиси можна використовувати алгоритми роботи з великими числами.
* Одна з улюблених тем [[спортивне програмування | спортивного програмування]]. З поширенням стандартних бібліотек для роботи з довгими числами поступово сходить нанівець.
 
== Порядок слів ==
 
Як говорилося вище, мови програмування мають вбудовані типи даних, розмір яких, в основному, не перевищує 64 біта. <br/>
Десяткова довга арифметика була реалізована в мові програмування Алмір-65 на ЕОМ [[СВІТ # МИР-1 | МИР-1]] і в мові програмування [[Аналітик (мова програмування) | АНАЛІТИК]] на ЕОМ [[СВІТ # МИР-2 | МИР-2]]. <br/>
Для роботи з великими числами, однак, існує досить багато готових оптимізованих бібліотек для довгої арифметики.
* GMP
* [[GNU Multi-Precision Library | GMP]]
* [[LibTomMath]]
 
У більшості мов високого рівня існує арифметика довжиною у два слова. Більш довгу арифметику зазвичай доводиться писати своїми силами, в міру можливості [[оптимізація (програмування)|оптимізуючи]] на [[мова асемблера|асемблері]]&nbsp;— в мовах високого рівня таких абстракцій, як «реєстрова пара» і «біт перенесення», зазвичай немає.
 
У [[Turbo Pascal]] існував шестибайтовий емулюючий [[плаваюча кома|дробовий тип]]&nbsp;— ''Real'' (у [[Delphi (мова програмування)|Delphi]] перейменований в ''Real48''). Обчислення з ним також проводилися за допомогою довгої арифметики.
 
== Необхідні апаратні засоби для роботи з довгою арифметикою ==
 
Строго кажучи, для реалізації арифметики довільної точності від процесора вимагається лише [[непряма адресація]]; в арифметиці фіксованою точності можна обійтися навіть без неї. Тим не менше, певні функції процесора прискорюють довгу арифметику, одночасно спрощуючи її програмування.
 
* [[Прапор переносу]]. Операції «скласти / відняти з перенесенням», «[[бітовий зсув | циклічний зсув через біт перенесення]]».
* Автоінкрементний і автодекрементние операції доступу до пам'яті.
 
=== Алгоритми перетворення системи числення ===
 
=== Інші алгоритми ===</big>
 
{{Compu-stub}}
63

редагування