2013-07-04 2 views
2

BigInteger 클래스를 사용하여 10-1000MB 범위의 숫자를 저장하려고 생각합니다. 누구도이 경험이 있습니까? 극도로 큰 숫자에 대해 실용적이거나 묵시적인 제한이 있습니까?매우 큰 숫자의 BigInteger 성능

+0

10 - 1000MB? 왜'int'에 안성맞춤 인 숫자에 BigInteger를 사용하겠습니까? 'BigInteger'가 어떻게 동작하는지 알고 싶다면'int'와'long'과 비교할 간단한 테스트를 작성하는 것이 어떻습니까? 너 10 분 걸릴거야? –

+1

@JimMischel : 1000000000은'int'에 들어갈 것이지만, OP는 2^1000000000 – finnw

+2

256^1000000000을 의미한다고 생각합니다 :) – mafu

답변

8

글쎄, documentation for BigInteger은 처리 할 수있는 메모리가 충분하면 숫자가 어떤 크기라도 될 수 있다고 말합니다.

BigInteger의 일반 연산 (일부 테스트에서는 50x 이상)이 일반 숫자 유형보다 훨씬 빠르지 만 실제로 그럴 수 있습니다.

또한 BigInteger 유형은 변경할 수 없으므로 BigInteger 유형에 대한 조작으로 인해 새 인스턴스가 생성됩니다. 따라서 2 개의 10MB 숫자를 추가하면 새로운 10MB 숫자가 생성됩니다. 기존 인스턴스를 수정하지 않습니다. 이는 코드를 구조화하는 방법에 영향을 줄 수 있습니다.

실제적인 제한 사항은 컴퓨터에서 사용할 수있는 메모리의 양과 프로그램에서 사용할 수있는 메모리의 양입니다. 이것은 32 비트 프로세스의 경우 3GB 이상, 64 비트의 경우 더 많아야하므로 필요한 숫자로 작업 할 수 있어야합니다.

2

계산상의 한계가 있습니다. 나는 한계에 부딪쳤다.

2 개의 거대한 숫자를 곱하면 사각형을 계산하는 데 걸리는 시간과 약간의 오버 헤드가 추가됩니다. 따라서 이전 계산보다 7 배 큰 숫자에 곱셈을 수행하면 약 50 배의 시간이 걸립니다. 1000 배 더 크게 만들면 약 1000000 배 이상 오래 걸릴 것입니다.

루프를 실행하면 평생 동안 프로그램이 완료되지 않을 수도 있습니다.

+0

Rune으로 메모리 량이 부족한 경우 Grimstad는 지적합니다. Java 프로그램에 더 많은 메모리를 할당하는 방법이 있지만 어떻게 기억하지 못하기 때문에이를 살펴 봐야 할 것입니다. – koZmiZm

+0

네, 이것은 고려해야 할 사항입니다. 그것은 주로 분할을 위해 사용될 것이고, 나는 그것이 곱셈보다 더 나쁜 런타임 동작을한다고 생각합니다. – mafu