Комментарии 18
Когда вы пишете на низкоуровневом языке, таком как С, вы беспокоитесь о выборе правильного типа данных и спецификаторах для ваших целых чисел, на каждом шаге анализируете достаточно ли будет использовать просто int или нужно добавить long или даже long double.long double — это не целое, а число с плавающей точкой.
Один на перенос, другой на знак?
А, ну теперь ясно, почему Питон такой тормозной. Вместо 1-2 тактов на 99.999% арифметики — десятки/сотни с ветвлениями.
Даже сложно представить, зачем нужны числа, большие чем uint64. Разве что только для алгоритма Диффи-Хеллманна.
Для Обычных понятий, которыми оперируешь каждый день такие числа не нужны. Если потеоретизировать, то наверное считать звёзды, атомы, не знаю даже.
Может кто расскажет зачем и где использовал, любопытно.
А это важно?
Просто арифметика произвольной точности реализуется ± одинаково везде, хоть в Boost, хоть в MPL, представление чисел и алгоритмы примерно одни и те же, где-то просто лучше оптимизировано, где-то хуже, но всё в пределах одной теоретической базы.
А касательно CPython или не CPython, language reference обязывает иметь тип integer произвольной длины, ограниченный только доступной памятью.
Integers (int)
These represent numbers in an unlimited range, subject to available (virtual) memory only. For the purpose of shift and mask operations, a binary representation is assumed, and negative numbers are represented in a variant of 2’s complement which gives the illusion of an infinite string of sign bits extending to the left.
>>> a = 5;
>>> b = 5;
>>> a is b;
True
>>> a = 5555;
>>> b = 5555;
>>> a is b;
True
>>> a = 3948937848723847;
>>> b = 3948937848723847;
>>> a is b;
True
В PyPy свой набор оптимизаций для интов (да и не только для интов)
https://doc.pypy.org/en/latest/interpreter-optimizations.html#integer-optimizations
Как в Python реализованы очень длинные числа типа integer?