Есть ли способ заставить Python использовать 64-битные целые числа в Windows?

Я заметил, что всякий раз, когда любое целое число превышает 2^31-1, мой числовой код сильно замедляется, несмотря на то, что я использую 64-битную сборку Python в 64-битной версии Windows. Похоже, что это верно для Python 2.7 и Python 3. Я читал, что Windows сделала их длинные 32-битными, но это не говорит о том, что невозможно использовать 64-битные числа.

Есть ли способ использовать 64-битные целые числа через класс или модуль или даже другую сборку Python?

3 ответа

Решение

Я не знаю ни о какой сборке Windows, которая использует 64-битный нативный тип для int с Python 2.7. Все компиляторы C будут использовать long ссылаться на 32-битный тип. Изменение Python для использования long long для внутреннего представления int скорее всего сломает модули расширения.

В Python 3.x единственным целочисленным типом является тип произвольной точности (известный как long под Python 2.x). В 64-битных системах произвольный тип точности работает кусками по 2 30 бит. В 32-битных системах произвольный тип точности работает кусками по 2^15 бит. Значения 15 и 30 будет трудно изменить.

Для внешних библиотек я поддерживаю библиотеку gmpy2. Он обеспечивает доступ к библиотеке GMP/MPIR произвольной точности. gmpy2.mpz Целочисленный тип обычно более эффективен, когда числа достигают длины ~128 бит. YMMV.

my_array = numpy.array(my_list,dtype=numpy.int64)

может быть?

Python имеет четыре числовых типа для целых чисел, int и long. Длинные целые числа имеют неограниченную точность. Вы получаете длинное, когда вводите достаточно большое число, или вы можете указать его явно, добавив "l"

>>> s = 1000
>>> type(s)
<type 'int'>
>>> s = 1000l
>>> type(s)
<type 'long'>
Другие вопросы по тегам