0

無限再帰を使用して円周率を計算するために、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;
        }
    }
}
4

1 に答える 1

0

intとを使用しているために混乱が生じます。decimalどちらも整数または固定精度の財務計算に適しています。私の提案は、すべての数値変数をここで宣言することdoubleです。これにより、2つのdoubleに対する数学演算は別のdoubleになるため、戻り値のタイプに関するあいまいさを取り除きます。

(これとは別に、アルゴリズムが間違っています。ただし、アルゴリズムの誤りは、使用しているタイプとは別の問題です。)

于 2011-05-05T16:28:11.843 に答える