Je recherche une formule / algorithme pour calculer pi ~ 3.14 dans une précision donnée.
La formule / algorithme doit avoir seulement une arithmétique très basique comme p>
Parce que je veux mettre en œuvre ces opérations en C ++ et que vous souhaitez conserver la mise en œuvre aussi simple que possible (aucune bibliothèque Bignum n'est autorisée). P>
J'ai constaté que cette formule pour calculer PI est assez simple: p> (Notez que (-1) ^ (k + 1) peut être facilement implémenté facilement par les opérateurs ci-dessus). P> mais le Le problème de cette formule est l'incapacité de spécifier le nombre de chiffres à calculer. En d'autres termes, il n'y a pas de moyen direct de déterminer quand arrêter le calcul. P> peut-être une solution de contournement de ce problème consiste à calculer la différence entre Quoi qu'il en soit, je recherche une formule / algorithme qui dispose de ces propriétés et converge également plus vite à PI P> P > N-1 code> th et
n code> Th terme calculé et la considérant comme l'erreur actuelle. P>
3 Réponses :
lien CodePad : sortie: p> 3.141592653589793115997963468544185161590576171875
3.141592653589793115997963468544185161590576171875
Cette formule est bien connue comme l'une des formules qui fournit N code> th chiffre de PI, sans avoir besoin de calculer
n-1 code> chiffres avant de cela. Ensuite, cette formule est-elle relativement efficace (par rapport aux autres formules) pour calculer tous les n chiffres?
@Isaac je n'ai pas tous testé tous, mais si, après 11 étapes, il trouve les 15 premiers chiffres, avez-vous toujours besoin de meilleures performances? ( Tous les 15 chiffres sont corrects i>)
11 étape pour 15 chiffres semble vraiment, vraiment bon! Par rapport à la sommation donnée dans la question qui nécessite 300 termes pour calculer 2 points décimaux! Quoi qu'il en soit, je me demande la capacité de bbp code> formule à calculer immédiatement
n code> th chiffre de
pi code> peut avoir un impact sur les performances du calcul de tous les chiffres de < Code> PI code> à
n code>.
@Isaac Je ne suis pas l'homme de dire si cela pourrait avoir un impact, mais il semble que cela fonctionne très bien, alors imo c'est bon. En outre, j'ai mis à jour la réponse avec Code C et comparaison avec m_pi code>
belle réponse au fait. (Bien qu'il ne puisse pas calculer PI pour Big N code> s).
dans votre exemple d'origine (convertissant lentement), le terme d'erreur peut être calculé car il s'agit d'une série alternative em>; Voir http://fr.wikipedia.org/wiki/alternating_series#approximatide_sums P >
essentiellement, le terme suivant non incapable est une liaison sur l'erreur. P>
Vous pouvez simplement faire l'enveloppe Taylor de l'Arctan (1), puis vous obtiendrez PI / 4 viennent de ressembler à toute partie de la pièce. L'enveloppe Taylor d'Arctan (1) P>
http://fr.wikipedia.org/wiki/taylor_series P>
Vous pouvez également utiliser la formule Euler avec Z = 1, puis multiplier le résultat de 4. P>
http://upload.wikimedia.org/math/2/ 7/9 / 279FECK5A2A3B80A71F5B220780A71F5B22078090168.PNG P>
La formule arctan est juste que l'équation OP a commencé avec (qui converge extrêmement lentement, BTW).
Pas si vous résumez les restes. Somme à tous les restes donnera une valeur complète aussi jusqu'à ce que vous commencez avec le # 0
"reste" n'est pas une vraie chose. Parlez-vous de la durée restante de la série Taylor? Je ne sais pas ce que tu veux dire en résumant ça.
Il y a des dizaines de formules que vous pouvez essayer ici, et la plupart d'entre eux convergent assez rapidement en.wikipedia.org/ wiki / pi
@Gabi: Mais la plupart d'entre eux contiennent des opérations non basiques telles que
racine carrée code>. Je cherche une formule basée sur le
+ code>,
- code>,
* code> et
/ code>. S'il vous plaît, veuillez lire toute la question.
Voici une autre source de Wikipedia qui devrait aider: en.wikipedia.org/wiki/numerical_approximations_of_%cf% 80 . (Et beaucoup sont des formules de somme en utilisant des opérateurs de base)
Dupliqué possible de Le moyen le plus rapide d'obtenir la valeur de PI
Je ne vois pas le lien entre vouloir uniquement des ops arithmétiques «simples» et éviter une bibliothèque de Bignum: la bibliothèque C standard C contient beaucoup plus que ces opérations, et vous allez avoir du mal à calculer des chiffres arbitraires sans une bibliothèque de Bignum, peu importe ce que vous utilisez.
@Nick: Il y a vraiment une connexion: je dois tout mettre en œuvre par moi-même, donc je préfère une formule avec moins de types d'opérations car j'ai besoin de moins d'efforts de programmation.
@Jason: Ce n'est pas dupliqué. Je cherche un algorithme avec des arithmétiques simples pour calculer PI (avec une précision arbitraire).
Ok, peut-être pas un duplicata de cette question particulière, mais plusieurs questions ont été posées sur Stackoverflow pour savoir comment calculer PI.
@Isaac Plus de Basic ops ne signifie pas moins d'effort de programmation. Qui est plus simple: n ajouts, ou une multiplication?
@Nick: Les chiffres doivent être stockés dans les chaînes (types de variables standard en C ++ ne prennent en charge qu'une précision limitée), puis je dois mettre en œuvre n'importe quel opérateur utilisé par moi-même. Par conséquent, je préfère avoir moins d'opérateurs (cela signifie moins de mise en œuvre). Notez que les variables sont décimales, je ne peux donc pas utiliser
addition code> pour la multiplication.
@Isaac Pourquoi ne pas simplement demander comment générer des chiffres de PI à une précision arbitraire, alors? Vous supposez que la réponse impliquera des mathématiques sur les cordes, quand il y a des méthodes sans doute bien meilleures.