2010-11-29 5 views
1

이것은 호기심에 어긋납니다. 우리는 암호학 응용에 대해 두 개의 큰 소수 (100 자리 이상)가 곱 해져서 공개 키의 일부를 형성한다는 것을 압니다. 그래서 어떤 Microsoft.NET 숫자 형식이 수백 자리의 가장 큰 소수를 저장할 수 있습니까? 즉, .NET에서 가장 큰 정수를 수용 할 수있는 숫자 데이터 유형은 무엇입니까? 8 바이트를 사용하는 System.Double이 (1.79769313486232 × 10^308)의 최대 값을 저장할 수 있음을 이해합니다. 이는 아마도 309 자리를 수용합니다. 그러나 System.Decimal은 16 바이트를 사용하며 최대 값은 79228162514264337593543950335이며 십진수는 29 자입니다 (Double보다 작은 자릿수).NET 숫자 데이터 형식에 저장할 수있는 최대 자릿수는 무엇입니까

감사합니다. Chak.

+0

"모든 컴퓨터 프로그래머가 부동 소수점 연산에 대해 알아야 할 사항"- http://blogs.sun.com/darcy/resource/Wecpskafpa-StanfordIcme500.pdf –

+0

RSA의 경우 유효 자릿수가 더 적어야합니다 정수 계산을 모듈러로 수행하기 때문에) 부동 소수점 유형 (Double, Decimal, ...)은 사용할 수 없지만 충분히 큰 정수가 필요합니다. – CodesInChaos

답변

2

.NET 4를 사용하는 경우 임의로 큰 정수를 저장할 수있는 System.Numerics.BigInteger을 확인하십시오. 이 넓은 범위을 가지고 있지만 그것은 단지 정밀도의 15 ~ 16 자리 숫자로 구성되어 있습니다 -

double하지 가게 309 자리 숫자를 않습니다. 즉, 큰 long 값 (예 : long.MaxValue 이하)을 double으로 변환하면 정보가 손실됩니다. 자세한 내용은 binarydecimal 부동 소수점 유형에 대한 내 기사를 참조하십시오.

+0

감사합니다. 이것은 실외 문제입니다. 70-536 .NET Framework Foundation 시험을 준비하고 있다면 우리가 지적한 System.Numerics.BigInteger에 대해 알지 못합니다. .NET 4에 대한 업데이트 된 시험이 있습니까? – Chakra

+0

@Chakra : 잘 모르겠다. 나는 정말로 "할"자격이 없다. –

관련 문제