문제

무한 재귀를 사용하여 PI를 계산하기 위해 C#에 다음 프로그램을 작성하려고했지만 정수/이중/소수점 분할에 대해 계속 혼란스러워합니다.

나는 이것이 왜 작동하지 않는지 전혀 알지 못하므로 여전히 C#을 배우면서 강력하게 입력 한 물건에 대한 이해 부족에 대해 용서하십시오.

미리 감사드립니다!

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;
        }
    }
}
도움이 되었습니까?

해결책

당신이 사용하기 때문에 당신의 혼란이 발생합니다 int 그리고 decimal, 둘 다 정수 또는 고정 금지 금융 계산에 더 적합합니다. 내 제안은 단순히 선언하는 것입니다 모두 숫자 변수의 double 여기에서는 두 번의 복식의 수학적 작동이 다른 두 배가 발생하기 때문에 반환 값의 유형에 대한 모호성을 제거합니다.

(이 외에도 알고리즘이 잘못되었습니다. 그러나 알고리즘의 잘못은 사용중인 유형과 별도의 문제입니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top