2009-03-01 2 views
7

매우 큰 숫자를 처리해야하는 앱을 개발 중입니다.대용량 유형

몇 가지 사용 가능한 LargeNumber 클래스를 확인하고 내가 좋아하는 몇 가지를 발견했습니다. 큰 정수와 큰 부동 소수점을위한 클래스가 있습니다.

숫자 중 일부는 작을 것이고 크기가 큰지 여부는 숫자의 길이를 확인해 볼 가치가 있는지 여부와 작은 C# int 또는 double을 사용하는 것이고 다른 경우에는 큰 수를 사용하는 것입니다. 가지고 있거나 이미 Large Integer와 Large Float 클래스를 사용하고 있다면 더 작은 수의 경우에도 이들을 사용해야합니다.

내 생각은 순전히 성능입니다. 나는 이후에 넣어 각 번호를 확인 할 가치가있을 것이라는 작은 숫자의 수학에 충분한 시간을 절약 할 수

+0

더 큰 숫자로 어떤 수업을 사용하고 있습니까? – ahsteele

+0

나는 약간을 가지고 노고있다. Microsoft.FSharp.Math.BigInt Microsoft.SolverFoundation.Common.BigInteger http://www.codeproject.com/csharp/biginteger.ASP INTX 는 소수를 위해 내가 w3b.sine Microsoft.FSharp.Math.BigNum 내가 그들 모두에 대한 몇 가지 벤치 마크를하고 난 – Sruly

+0

이 [질문] (HTTP를 참조하십시오 무엇을 얻을 볼려고을 사용하고 있습니다 : //stackoverflow.com/questions/494923/numbers-that-exceeds-basic-types-in-c). –

답변

2

정말 말할 하드 -. 당신의 제 3의 라이브러리 :

최선의 방법에 따라 달라집니다 System.Diagnostics.StopWatch 클래스를 사용하여 gazzillion 다른 계산을 수행하고 시간을 측정하고 결과를 비교하는 것이 좋습니다.

[편집] - 벤치 마크에 대해 일련의 벤치 마크를 수행합니다. 정규 32/64 비트 숫자에 대한 계산을 수행하는 largeInt-type과 숫자가 일반 Int32/Int64 유형 (해당하는 경우)에 맞는지 여부를 확인하고 이러한 유형으로 "다운 캐스팅"한 다음 동일한 유형을 실행합니다 계산서 이러한 유형을 사용하는 라이온스. 귀하의 질문에, 내장 된 형식이 더 빠르면 어떻게 될지 들립니다.

응용 프로그램이 자신보다 많은 사람들을 대상으로하는 경우 다른 컴퓨터에서 실행할 수 있습니다 (단일 코어, 멀티 코어 , 32 비트, 64 비트 플랫폼), 플랫폼이 계산에 많은 영향을 미쳤다면 다른 컴퓨터에서 계산을 다르게하기 위해 일종의 전략 패턴을 사용하십시오.

행운을 빕니다 :) 내가 괜찮은 많은 수의 라이브러리는 그 자체에이 최적화를 할 수있을 것이라고 기대

+0

어떤 유형의 벤치 마크 테스트를 수행합니까? – Sruly

+0

@Sruly - 응용 프로그램에 필요한 수학 유형을 복제하는 것들 -p –

+0

벤치 마크와 관련된 내용으로 원본 대답 업데이트 : P – cwap

2

내가 예, 검사 이상을 지불 할 것이다 말할 것 정규 범위 내에 충분한 값을 가지고있는 한

논리는 간단합니다. 정수 추가는 하나의 어셈블리 명령어입니다. 비교와 결합하면 3 ~ 4 개의 명령입니다. 이러한 작업의 소프트웨어 구현은 대부분 느리게 진행될 것입니다.

이 검사는 LargeNumber 라이브러리 자체에서 수행해야합니다. 그들이 그것을하지 않으면, 그 자리에 수표를 피하기 위해 래퍼가 필요할 수 있습니다. 그러나 래퍼의 추가 비용을 고려해야합니다.

0

매우 큰 숫자를 처리하는 데 필요한 동일한 필드와 아주 작은 숫자의 정밀도를 동시에 처리하는 프로젝트에서 작업했습니다.
그런 종류의 모든 수에 대해 필드 (가수와 지수)에 저장하는 것으로 끝났습니다.
가수/지수 계산을위한 클래스를 만들어 잘 수행했습니다.