저는 100000 자리 숫자를 처리해야하는 프로그래밍 문제에 대해 연구하고 있습니다. 파이썬이 이런 식의 숫자를 처리 할 수 있습니까? 그것을 할 수코드에서 큰 숫자 처리
답변
물론이 :
>>> s = 10 ** 100000
잘 작동하는 것 같다 :
>>> x = 10**100000
>>> x
10000000000000000000000000000000000000000000000000000000000000000000000000000000
[snip]
00000000L
이 http://docs.python.org/library/stdtypes.html에 따르면, 아마 그 크기가 제한되지 않는다는 것을 의미한다 "긴 정수 무제한 정밀도를 가지고".
예; Python 2.x에는 int과 long의 두 가지 유형이 있으며, 무제한 크기는입니다. 그러나 필요한 경우 모든 계산이 자동으로 변환됩니다. 큰 숫자를 다루는 것은 괜찮지 만, 100000 자릿수를 출력하려고하거나 심지어 문자열을 만들려고하면 더 느린 것 중 하나가 될 것입니다.
소수 자릿수 고정 소수점 정밀도가 필요한 경우 십진수 모듈이 있습니다.
다른 답변으로 지적한대로 파이썬은 사용 가능한 메모리 양에 의해서만 제한되는 정수를 지원합니다. 당신이 그들을 위해 더 빨리 지원을 원하는 경우에, ;-) gmpy은 (gmpy의 저자이자 현재 공동 테이너로 여기 물론 약간의 편견 해요 시도 :
일반적으로$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'x+1'
10000 loops, best of 3: 114 usec per loop
$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y+1'
10000 loops, best of 3: 65.4 usec per loop
는, 산술 작업을위한 병목 아니다 그러한 숫자 (일부 조합 및 숫자 이론적 기능에 대한 gmpy
의 직접적인 지원이 그러한 숫자를 사용하는 경우 도움이 될 수 있음). 진수 문자열로 숫자를 켜기 ... 아마 느린 느낄 것이다 일반적인 작업입니다 : 보시다시피
$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'str(x)'
10 loops, best of 3: 3.11 sec per loop
$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'str(y)'
10 loops, best of 3: 27.3 msec per loop
는 엄청난 수의도에 gmpy
문자열 화 (stringification)는 간단한 또한보다 느린 수백 번 할 수 있습니다 (아아, 그것은 본질적으로 복잡한 작업입니다!); 하지만 네이티브 파이썬 코드에서 시간의 비율은 수만 시간이 단순한 것보다 느려질 수 있으므로, 특히 당신이 다운로드하고 설치하지 않기로 결정한 경우에 특히 조심하고 싶습니다. (예 : 할 수 없습니다 : 예, gmpy는 현재 Google App Engine에서 지원되지 않습니다.) 마지막으로
, 중간 케이스 : gmpy
으로 둔화 미만 100 시간 동안 기본 파이썬 코드에서 두 개의 거대한 수를 곱하여
$ python2.6 -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'x*x'
10 loops, best of 3: 90 msec per loop
$ python2.6 -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y*y'
100 loops, best of 3: 5.63 msec per loop
$ python2.6 -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y*x'
100 loops, best of 3: 8.4 msec per loop
보시다시피가, 단순한 또한보다 약 1000 배 속도가 느려질 수 있습니다 (숫자가 이미 gmpy
의 자체 형식이기 때문에 하나만있는 경우에도 그다지 나쁘지 않으므로 다른 형식을 변환하는 오버 헤드가 발생합니다.)
gmpy에 감사드립니다! 나는 그것을 Coursera의 암호 과정에 사용하고 있습니다. –
GMPY2는 정수 및 합리적인 산술에 대해 GMP 라이브러리를 지원하지만 GMPY2는 MPFR 및 MPC 라이브러리에서 제공하는 다중 정밀도 실수 및 복소수 산술에 대한 지원을 추가합니다. GMP (GNU 다중 정밀도 산술 라이브러리)는 모든 피연산자 크기에 대해 다른 bignum 라이브러리보다 빠른 것을 목표로합니다. http://en.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library –
이미 지적했듯이 파이썬은 메모리가 허용하는만큼 큰 숫자를 처리 할 수 있습니다. 숫자가 커지면 모든 작업의 비용이 증가하므로 추가하고 싶습니다. 이것은 인쇄/문자열 변환 (가장 느리지 만)에 두 개의 큰 수 (하드웨어가 네이티브로 처리 할 수있는 것보다 큽니다)를 더하면 더 이상 O (1)이 아닙니다.
파이썬이 큰 숫자로 작업하는 것에 대한 세부 사항을 깔끔하게 숨기지 만,이 큰 숫자 연산은 항상 일반 int에있는 연산과 같지 않다는 점을 명심해야한다.
- 1. VBA에서 Long보다 큰 숫자 처리
- 2. 수학 오버플로 - 큰 숫자 처리
- 3. 큰 숫자 변환 문제
- 4. 큰 숫자, 일반적인 알고리즘?
- 5. 임베디드 코드에서 이벤트 처리
- 6. PHP와 SQL의 큰 숫자 비교하기
- 7. 큰 카 마이클 숫자 데이터
- 8. 큰 비트 맵 처리
- 9. 큰 xml 파일 처리
- 10. 큰 텍스트 파일 처리
- 11. OutOfMemoryException 큰 파일 처리
- 12. XML : 큰 데이터 처리
- 13. 큰 사진 업로드 처리
- 14. array_diff로 큰 배열 처리
- 15. Python에서 UTF-8 숫자 처리
- 16. VB.NET 코드에서 VB.NET 이벤트 처리
- 17. Maven과의 큰 리소스 종속성 처리
- 18. Qt에서 매우 큰 이미지 처리
- 19. Java에서 큰 문자열 상수 처리
- 20. 큰 데이터 처리 버튼 클릭시
- 21. C로 큰 숫자 저장 및 작업
- 22. 재귀 및 배열을 사용하여 큰 숫자 곱하기
- 23. 범위가 너무 큰 경우 숫자 목록 상자에 어떻게 접근해야합니까?
- 24. XSLT : 지수 표기법을 사용하는 숫자 값 처리
- 25. 숫자 데이터를 인식하는 자연 언어 처리
- 26. 거대한 숫자 처리 C, Java, Informix
- 27. 숫자 제한 - 매우 큰 상수를 곱하면 한계가 있습니까?
- 28. 예외 처리 코드에서 예외를 처리하는 방법은 무엇입니까?
- 29. 매우 큰 SFTP 업로드 처리 - 코코아
- 30. 페이지 목록이없는 매우 큰 개체 목록 처리?
매우 유사 : http://stackoverflow.com/questions/538551/handling-very-large-numbers-in-python –
이 숫자로 무엇을하는지에 따라 로그 (숫자). – mpen