Comment calculer pi à N, le nombre de places en C# à l'aide de boucles
Comment pourrais-je aller sur le calcul de PI en C# pour un certain nombre de décimales?
Je veux être en mesure de passer un nombre dans une méthode et de revenir PI calculé à un nombre de décimales.
public decimal CalculatePi(int places)
{
//magic
return pi;
}
Console.WriteLine(CalculatePi(5)); //Would print 3.14159
Console.WriteLine(CalculatePi(10)); //Would print 3.1415926535
etc...
Je ne se soucient pas de la vitesse du programme. J'ai juste envie d'être aussi simple et facile à comprendre car il peut être. Merci d'avance pour l'aide.
Simple à comprendre en termes de programmation, ou en termes de mathématiques?
en.wikipedia.org/wiki/...
Jetez un oeil ici: dotnetperls.com/pi Il y a des exemples de méthodes de calcul de pi à 20 places, toutefois, certaines limitations sont abordés tels que le manque de précision
de la programmation.
en.wikipedia.org/wiki/...
Jetez un oeil ici: dotnetperls.com/pi Il y a des exemples de méthodes de calcul de pi à 20 places, toutefois, certaines limitations sont abordés tels que le manque de précision
de la programmation.
OriginalL'auteur Chev | 2012-07-26
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, en supposant que vous voulez un certain nombre quelconque de chiffres de pi, et nous ne voulons pas être confiné avec la précision d'un des divers nombres à virgule flottante là-bas, nous permet de définir une fonction de Pi comme une chaîne de caractères plutôt que de tout type de nombre.
L'un des plus cool des algorithmes j'ai trouvé lors de la recherche de cette technique est la Stanley Rabinowitz et Stan Wagon - Algorithme. Il ne nécessite pas de calcul en virgule flottante, et est surtout une méthode itérative. Il nécessite de la mémoire pour stocker des entiers tableaux dans les calculs intermédiaires.
Sans prendre le temps de rationaliser ou de nettoyer le code ici est une implémentation de l'algorithme (notez le résultat n'a pas d'ajouter le point décimal).
Assurez-vous de citer l'algorithme et ce site si vous avez l'intention d'utiliser ce code pour rien d'autre que l'utilisation personnelle.
De Code C#
Mise à jour
J'ai enfin réussi à réparer le "porter erreur qui survient après 35 chiffres. Page 6 du document lié, en fait, expressément parle de ce qui se passe ici. J'ai testé la version finale du bon de 1000 chiffres.
après 4 ans, vous avez finalement m'a motivé à le résoudre
environ 3 ans, vous avez demandé s'il y avait des mises à jour sur elle... j'ai enfin résolu
génial, j'ai testet avec 100 chiffres - semble de travail +1
OriginalL'auteur nicholas
Si vous avez besoin de plus de précision, vous aurez de la difficulté à utiliser le type de données double car il prend en charge un certain max. précision (qui est fourni par les Mathématiques.PI).
Cela ne me permet d'aller à 15 places.
Virgule a toujours 4 chiffres après la virgule? D'où vous est venue cette idée?
Ensuite, vous devez définir le nom de domaine de votre problème. Cette méthode fonctionne pour les deux exemples que vous donnez (5 et 10 jours.p.) Qu'est-ce que vous nombre maximum de décimales?
Oui, je sais ce que la décimale est pour, mais votre commentaire est encore non-sens. Si je fais ceci:
decimal myPi = (decimal)Math.Round(Math.PI, 10);
- je obtenir 3.1415926536. En d'autres termes, 10 décimales dans un type decimal. Aller de l'avant et de vérifier le site web MSDN (msdn.microsoft.com/en-us/library/system.decimal.aspx)OriginalL'auteur usr
Après beaucoup de recherches j'ai trouvé ce petit extrait:
Il se porte comme un charme jusqu'à présent. Vous avez juste à ajouter le Système.Numériques de la bibliothèque de la part du GAC pour résoudre le BigInteger type.
IEnumerable
etElementAt
, mais il suffit de fournirArcTan1OverX
le nombre d'itérations à effectuer.comment beaucoup plus rapide?
OriginalL'auteur Chev
Même algorithme que nicolas, mais les utilise de rendement pour l'évaluation différée
J'ai utilisé court.MaxValue comme limite supérieure pour le nombre d'endroits, mais c'est parce que ma machine est faible sur la mémoire virtuelle. Une meilleure machine doit être en mesure d'accueillir jusqu'à int.MaxValue.
La fonction peut être appelée de la sorte:
yield
😀Résultat non valide. C'est un 4 au lieu de 5, lors de la 35e chiffres - regardez-nicolas de mise à jour
OriginalL'auteur Jason Bowers
Si vous êtes satisfait avec le nombre de chiffres fournis par le natif de la bibliothèque math, alors c'est très simple; il suffit de ronde pour le nombre désiré de chiffres. Si vous avez besoin de plus des chiffres (des dizaines ou des centaines ou des milliers), vous avez besoin d'un algorithme qui crache les chiffres un à un. Jeremy Gibbons donne un algorithme qui je mettre en œuvre deux fois à mon blog, où vous trouverez le code sur le Schéma, C, Python, Haskell, Perl-et-Vient (mais pas de C#, désolé).
OriginalL'auteur user448810
La façon la plus simple est de stocker un grand nombre de chiffres de pi dans une Chaîne de caractères constante. Alors à chaque fois que vous avez besoin
n
de chiffres de précision, il vous suffit de prendre une sous-chaîne de 0 àn+2
.OriginalL'auteur tskuzzy