Question

J'ai essayé d'écrire le programme suivant en C # pour calculer pi en utilisant une récursion infinie, mais je continue à obtenir confus au sujet entier / double / division décimale.

Je n'ai vraiment aucune idée de pourquoi cela ne fonctionne pas, donc me pardonner mon manque de compréhension des choses fortement typé, comme je suis encore à apprendre C #.

Merci d'avance!

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;
        }
    }
}
Était-ce utile?

La solution

Votre confusion vient du fait que vous utilisez int et decimal, toutes deux sont mieux adaptés pour les entiers ou les calculs financiers précision fixe. Ma suggestion serait de simplement déclarer tous de vos variables numériques comme double ici, ce qui supprimera toute ambiguïté sur ce que les types de vos valeurs de retour sont, depuis une opération mathématique sur deux résultats en double dans un autre double.

(En dehors de cela, votre algorithme est erroné. Cependant, la fausseté de votre algorithme est une question distincte des types que vous utilisez.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top