2013-08-13 2 views
0

저는 c로 약간 임의의 정밀도를 쓰고 있습니다. (gmp와 같은 라이브러리가 존재한다는 것을 알고 있습니다. 너트를 쓰면 재미 있습니다. 직접 연습 해보십시오.) if 배열은 매우 긴 정수를 표현하는 가장 좋은 방법이고, 더 좋은 해결책이있을 수도 있습니다 (체인이 연결되었을 수도 있습니다)? 그리고 둘째 파이썬 작업이 큰 정수를 가질 않는 방법? (이 배열이나 다른 기술을 사용합니까?)임의의 정밀도 정수 저장

사전에 감사

+0

Python, C 또는 Python을 지원할 C로 작성된 라이브러리에 대해 묻고 싶습니다. – levengli

+0

불명확 한 질문에 실례합니다 : c로 라이브러리를 작성하고 싶습니다. 하지만 잘못이 아니라면 파이썬은 c로 작성되어 있으므로 어떻게 작동하는지 알고 싶습니다. 그런 작업을 수행 할 수 있습니다. – BigFoot

+0

변경 가능하거나 변경할 수없는 정수를 만들 계획이 있습니까? 당신이 가변적 인 정수를 지원하기를 원한다면 * 아마도 * 링크 된 목록을 사용하면 재 할당을 피할 수는 있지만 결국은 더 빠를 것이라고 생각합니다. – Bakuriu

답변

1

시도 독서 문서에 있습니다. 내가 본 것으로부터 정수가 동적으로 할당 된 것처럼 구현되는 것 같습니다. 이는 숫자가 커질 때 realloc 될 것입니다. http://gmplib.org/manual/Integer-Internals.html#Integer-Internals을 참조하십시오.

+0

잘 이해하면 gmp는 배열에 임의의 정수를 저장합니까? 또한 잘 이해한다면'int'라고 입력하면 배열입니다. 그리고 제 질문은, 각 팔다리가 0과 9 사이의 값만 받아들이 기 때문에 왜 '짧은 int'이 아닌지, 다시, 잘 이해한다면? 미리 감사드립니다. – BigFoot

+0

일반적으로 크기가 기계어와 동일한 셀을 사용하는 것이 효율적입니다. 보통 'int'또는 'long'입니다. 또한 수는 기수 10에 저장되지만 기저 N에 저장됩니다. 여기서 N은 셀이 가질 수있는 최대 값입니다. 예 : 숫자 770을 저장하고 셀이 바이트라고 가정 해 보겠습니다. 왜냐하면 '2 + 256 * 3 = 770'이므로'2,3 '으로 저장됩니다. – tohava

+0

예에서 각 셀은 N = 255? 또한 각 셀에 대해 10보다 더 큰 기준을 갖는 것이 더 빠르고 경제적 일 것이라고 제안하고 있습니까? 미리 감사드립니다. – BigFoot

0

파이썬 긴 정수 그냥 객체 헤더와 함께 간단한 구조로 구현되는 모든 응답 정수 배열 (플랫폼에 따라 16 비트 또는 32 비트 정수일 수 있음)

코드에 대한 libgmp, 이미 bigints를 구현 http://hg.python.org/cpython/file/f8942b8e6774/Include/longintrepr.h

+0

빠르고 정확한 대답을 해주셔서 감사합니다. 그러나 코드의 복잡성으로 인해 ob_size는 어디에 정의되어 있습니까? – BigFoot

+0

object.h, 같은 디렉토리. –

+0

다시 한번 감사드립니다. 잘 이해한다면, long 정수는 대부분'ob_digit' 배열에 저장되어 있습니까? 다시 고마워 – BigFoot