2011-04-21 6 views
2

흠 ... 내가 문제 있어 I했습니다입니다 결과 특정 계산 -308 (더블 그물에서 가장 큰 값) 내가 BIGFLOAT http://www.fractal-landscapes.co.uk/bigint.html라는 라이브러리를 통해이 문제를 해결 어떤 식 으로든^100.4 ~ 100000000처럼 아이디어가 큽니까?

내가 0.4 (1000 또는 100000000)과 같은 것을 계산할 필요가있는 것은 무엇입니까? 매우 오랜 시간이 걸리는 문제입니다. 병렬 또는 분산 프로그래밍을 아직 연구하지 않았지만, 신속하고 이해할 수있는 솔루션이 필요합니다. 저는 다음 6 시간 안에이 프로젝트를 제공 할 것입니다 !! : 여기

D

코드입니다 : K 1000입니다

private BigFloat getBlocking(double k) 
    { 
     double p1, p2; 
     BigFloat p3; 
     p3 = new BigFloat(pp); 
     p1 = this.P/(double)(k/(double)this.N); 
     p2 = Math.Pow((1 - p1), 2); 
     p3= new BigFloat(1-p2,pp); 
     p3.Pow((int)k); 
     return p3; 

    } 

, N은 1001

+0

'오랜 시간'이란 무엇입니까? – magma

+6

.NET이 10^-308보다 큰 값을 처리 할 수 ​​없다는 것을 진지하게 생각합니다. (단지 다리를 당길뿐입니다!) –

+0

'pp '가 무엇인지 말하지 않기 때문에 우리가 할 수있는 일이 많이 있는지 확신 할 수 없습니다. 도움. – Gabe

답변

3

다운로드 및 참조입니다, 당신의 C# 프로젝트에서 Microsoft J # .NET 라이브러리 - 당신이 사용할 수 있도록 J #의 BigDecimal 구현.

참조 :

Arbitrary-Precision Decimals in C#

큰 진수 :

(무료)가 J 번호 런타임을 설치합니다 http://www.microsoft.com/downloads/en/details.aspx?familyid=f72c74b3-ed0e-4af8-ae63-2f0e42501be1&displaylang=en

과 :

Arbitrary precision decimals in C#?

과 : http://geekswithblogs.net/gyoung/archive/2006/05/01/76869.aspx

J 번호 재 distributables

는 의 BigInteger와 BigDecimal를 매우 잘 테스트 구현을 포함 당신 수있는을 참조하여 간단하게 하여 .NET 응용 프로그램에서 직접 사용 J # 어셈블리 vjslib.dll. http://download.microsoft.com/download/2/e/9/2e9bde04-3af1-4814-9f1e-733f732369a3/NETMatters0512.exe 에 대해 자세히 설명되어 있습니다. 또한 은 매우 유용한 인 일부 Zip 클래스를 포함합니다.

과 :

MSDN - BigInteger, GetFiles, and More

당신이 C#에서 구현 과다, C++ 및 기타 다양한 언어를 찾기 위해 웹을 검색 할 수 있지만

, 그것은하지 않을 수도 있습니다 필요한. J # 라이브러리에 의존하지 않으려면 처분시 큰 번호 구현이 이미 있어야합니다. 사실, 당신은 두 가지가 있습니다. J # 런타임 라이브러리 vjslib.dll은 .NET 프레임 워크처럼 구성 요소로 을 재배포 가능합니다. Visual J # 다운로드에서 다운로드 할 수 있습니다 ( 도 Visual Studio®에서 필수 구성 요소로 설치됨).C# 또는 C++ 응용 프로그램이 Microsoft.VisualBasic.dll (Visual 기본 런타임 라이브러리), C#, Visual Basic® 및 C++ 응용 프로그램을 사용할 수있는 것과 같은 방식으로 J # 런타임을 사용할 수 있습니다 도서관 및 많은 흥미로운 클래스 노출합니다.

+0

이것은 나쁜 생각은 아니지만 이것이 OP의 현재 솔루션보다 빠르다는 것은 분명하지 않습니다. – Gabe

+0

다음은 전체 코드입니다. http://pastebin.com/hCxEZ4Hj – xsari3x

+1

@Gabe 당신이 옳습니다. 우리는 잘 모릅니다. 나는 더 빨라질 수도 있다고 생각하지만, 위의 코드의 목적, 상황 및 추론에 대해서는 많이 알지 못하기 때문에 문제를 재현 할 수도 없습니다. 또 다른 옵션은 정수를 사용하는 것입니다. C# 4.0의 BigInteger 또는 GnuMpDotNet (http://www.emilstefanov.net/Projects/GnuMpDotNet/). – magma

6

모든 자릿수가 필요하지 않은 경우 대수를 사용하여 문제를 해결할 수 있습니다. (0.4^100000000)의 로그는 정규 부동 소수점 범위 내에있는 log(0.4)*100000000입니다.