Как стать автором
Обновить

Комментарии 18

Когда вы пишете на низкоуровневом языке, таком как С, вы беспокоитесь о выборе правильного типа данных и спецификаторах для ваших целых чисел, на каждом шаге анализируете достаточно ли будет использовать просто int или нужно добавить long или даже long double.
long double — это не целое, а число с плавающей точкой.
Так и не написали зачем используются оставшиеся 2 бита в «цифре».

Один на перенос, другой на знак?

Количество бит в цифре должно быть кратно пяти. Это довольно произвольное ограничение реализации. Из-за него цифра занимает 15 или 30 бит. Подробности в исходном коде. Интересное, кстати, чтение.

А, ну теперь ясно, почему Питон такой тормозной. Вместо 1-2 тактов на 99.999% арифметики — десятки/сотни с ветвлениями.

Даже сложно представить, зачем нужны числа, большие чем uint64. Разве что только для алгоритма Диффи-Хеллманна.

Тоже не понимаю. Идея в том, что такие большие числа не естественны для восприятия. Я мыслю категориями, Понятными мне: десятки и сотни, минуты и дни, метры и километры. А такие, как числа, как 2^64, тысячи лет, световые годы — просто не могу представить.
Для Обычных понятий, которыми оперируешь каждый день такие числа не нужны. Если потеоретизировать, то наверное считать звёзды, атомы, не знаю даже.
Может кто расскажет зачем и где использовал, любопытно.
Древние люди тоже мыслили понятными им категориями.
Считали на пальцах. Они не знали ни нуля, ни отрицательных чисел.
Ведь не может быть отрицательного числа бананов. А больше 10 кокосов слишком много и никому не надо.

Эх, ну ладно, пойду палкой по пальмам стучать байты по регистрам распихивать.

Только автор забыл написать, что речь идёт о CPython.

А это важно?


Просто арифметика произвольной точности реализуется ± одинаково везде, хоть в 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.
Я больше про детали внутренней реализации и про кеш объектов от -5 до 256. Не думаю, что другие реализации поступают именно так же. К примеру, PyPy, похоже, умеет переиспользовать объекты для интов вне зависимости от хранимого значения:
>>> a = 5;
>>> b = 5;
>>> a is b;
True
>>> a = 5555;
>>> b = 5555;
>>> a is b;
True
>>> a = 3948937848723847;
>>> b = 3948937848723847;
>>> a is b;
True
Еще одно подтверждение того, что на питоне вообще ничего не нужно считать нативно. Необходимо воспринимать его как высокоуровневую обертку над C/C++, либами. И считать только при помощи numpy, pytorch и т.п.
Странное совпадение вашего ника и домена приведенной ссылки вызывает вопрос: вам обидно, что перевели не вашу статью, а плагиат?))
Мне не привыкать уже, индусы иногда до 90% текста просто копируют и потом еще на конференциях выступают. Просто чтобы автор знал. Возможно, в следующий раз будет лучше источники для перевода выбирать.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий