2010-03-18 4 views
0

무한 반복을 사용하여 pi를 계산하기 위해 다음 프로그램을 C#에서 작성하려고 시도했지만 정수/이중/소수 구분에 대해 계속 혼란 스럽습니다.C#에서 무한 시리즈를 사용하여 파이 계산하기

정말 작동하지 않는 이유가 없으므로 강하게 입력 된 자료에 대한 이해가 부족하여 C#을 배우고 있습니다.

미리 감사드립니다. 당신은 정수 또는 고정 정밀도 재무 계산에 더 적합하다 둘 다 intdecimal를 사용하고 있기 때문에

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public static int Main(string[] args) 
     { 
      int numeratornext = 2; 
      int denominatornext = 5; 

      decimal findto = 100.0M; 
      decimal pi = 0.0M; 
      decimal halfpi = 1.0M; 
      int seriesnum = 1; 
      int seriesden = 3; 

      for (int i = 0; i < findto; i++) 
      { 
       halfpi += Decimal.Divide((decimal)seriesnum, (decimal)seriesden); 
       //System.Console.WriteLine(Decimal.Divide((decimal)seriesnum, (decimal)seriesden).ToString()); 
       seriesnum *= numeratornext; 
       seriesden *= denominatornext; 
       numeratornext++; 
       denominatornext += 2; 
      } 

      pi = halfpi * 2; 

      System.Console.WriteLine(pi.ToString()); 
      System.Console.ReadLine(); 
      return 0; 
     } 
    } 
} 
+0

당신은 진수 형식이 아닌 경우 신속하게 문제로 실행하려고 당신이 숫자를 다 쓸 것이기 때문에 무한 정밀도. – staticsan

+1

"무한 재귀"는 무한 크기의 스택이 거의 필요합니다. 내 머리 꼭대기에서 이걸 지원하는 아키텍처에 대해 잘 알지 못한다 :-) – paxdiablo

+0

코드에서이 웹 페이지에 액세스하여 100 만 자릿수의 "수확"을 고려할 수 있습니다. 또는이 기사에는 C# 코드가 있습니다. http://www.omegacoder.com/?p=91 – BillW

답변

0

귀하의 혼란이 발생한다. 제 제안은 숫자 변수의 모든을 여기에 double으로 선언하는 것입니다. 그러면 반환 값의 유형에 대한 모호성이 제거됩니다. 두 개의 double에 대한 수학 연산으로 인해 다른 double이 반환되기 때문입니다.

(이것을 제외하고는, 알고리즘은 잘못된 것입니다. 그러나, 알고리즘의 그름이 사용중인 유형과는 별개의 문제입니다.)

+0

1 년 전보다 나는 내가 무엇을하려고했는지 기억하지 못하기 때문에이 질문에 정말로 대답 할 수 없다. 어쨌든 도움을 주셔서 감사합니다. –

+0

@Jonathan, woah. 나는 이것이 아주 오래된 질문이라는 것을 깨닫지 못했다. 그것은 어떤 이유로 활성 페이지에 나타났습니다. –