Calcul de pi en utilisant des séries infinies en C #
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;
}
}
}
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.)