Найти - Пользователи
Полная версия: Число сочетаний(большие числа). Python int too large to convert to C long
Начало » Python для новичков » Число сочетаний(большие числа). Python int too large to convert to C long
1
hter
import numpy
n = 1600
m = 1500
def C(n,k):
        s = 0
        B = numpy.array([[0]*(n+1)]*(n+1))
        for i in range(n+1):
                B[i][0]=1;
                B[i][i]=1;
                for  j in range(1,i):
                        B[i][j]=long(B[i-1][j-1])+long(B[i-1][j])
        return B[n][m] % 1000000
print C(n,m)

OverflowError: Python int too large to convert to C long
Lexander
1. Версия Питона? Очень похоже на 2. Если так, используйте 3.
2. Полный трейс ошибки. Ошибка на range или long()?
От этого зависит решение: собственный заменитель для range, numpy.int32, numpy.int64 или даже беззнаковые целочисленные типы.
hter
А чем 3 лучше?
Ошибка на long()

File “C:\Python27\1.py”, line 16, in C
B=long(B)+long(B)
OverflowError: Python int too large to convert to C long

FishHook
hter
А чем 3 лучше?
Разумно предположить, что если бы она не была лучше, то её бы не придумывали.
Lexander
hter
А чем 3 лучше?
На 64-битных платформах функция range в 3 питоне использует другой тип - long int длиной 64 бита.
В вашем конкретном случае, это не имеет значения, но все же: какая стоит виндовс?
Попробуйте приведение типов из numpy вместо long.
doza_and
*** Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32. ***
>>> import numpy as np
>>> a=np.array([4000000],dtype='i')
>>> a[0]
4000000
>>> a[0]*a[0]
C:\apps\PyScripter\PyScripter.exe:1: RuntimeWarning: overflow encountered in int_scalars
  MZP1246822400
>>> 4000000*4000000
16000000000000L
>>> 16000000000000L*16000000000000L
256000000000000000000000000L
Собственно мораль. Если хотите работать с очень большими числами то зачем вы numpy используете?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB