Вычисление числа пи с использованием бесконечных рядов в C # - PullRequest
0 голосов
/ 18 марта 2010

Я пытался написать следующую программу на 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;
        }
    }
}

1 Ответ

0 голосов
/ 05 мая 2011

Ваша путаница возникает из-за того, что вы используете int и decimal, которые лучше подходят для целочисленных или финансовых расчетов с фиксированной точностью. Я бы предложил просто объявить все ваших числовых переменных как double, что устранит любую двусмысленность относительно типов возвращаемых значений, поскольку любая математическая операция с двумя двойными значениями приводит к еще одному двойному .

(Кроме того, ваш алгоритм неверен. Однако неправильность вашего алгоритма - это отдельная проблема от типов, которые вы используете.)

...