Bonsoir,
j'ai vu que certain logiciel faisait calculer PI à l'ordinateur pour en voir ces performence du style si le processeur chauffe beaucoup etc..
Donc je voudrai savoir comment on peut faire ce calcule?
Bizarement , elle n'aparait pas la liste des constantes définies dans la liste des en-tête standard :
(http://www.siteduzero.com/forum-83-11461-p1-listes-des-fonctions-c.html)
Si tu veut utiliser pi pour faire des calcules, fait comme vient de dire Davidbrcz.
Si tu veut calculer pi, va sur wikipedia article sur pi et implente un des algorithmes proposés.
Oui, M_PI n'est pas standard.
Mais bon, un moyen simple d'y remédier est le suivant.
Dans un .h appelé pas tous tes fichiers .C ou .cpp (ou plusieurs fois meme, c'est pas genant), mettre :
Je pense que vous n'avez pas compris... Il demande comment on calcule la valeur de pi, il veut pas la valeur, il veut juste calculer pi. Pas pour calculer des trucs à l'aide de pi, mais juste le calculer.
Une solution (mauvaise au niveau mathématique mais facile à coder) est de faire comme ça:
Tu calcules la somme des inverses des carrés (<math>\(1%2F1%20%2B%201%2F4%20%2B%201%2F9%20%2B...%20%2B%201%2F10%5E2%20%2B%20...%20%2B%201%2F53%5E2%20%2B...\)</math>) puis tu multiplies par 6 et tu prends la racine carrée du résultat.
Je me base sur la formule :<math>\(%5Csum_%7Bn%3D1%7D%5E%7B%2B%5Cinfty%7D%7B1%20%5Cover%20n%5E%7B2%7D%7D%20%3D%20%5Cfrac%7B%5Cpi%5E2%7D%7B6%7D\)</math> (Cas particulier de la série de Riemann)
Tu calcules la somme des inverses des carrés (<math>\(1%2F1%20%2B%201%2F4%20%2B%201%2F9%20%2B...%20%2B%201%2F10%5E2%20%2B%20...%20%2B%201%2F53%5E2%20%2B...\)</math>) puis tu multiplies par 6 et tu prends la racine carrée du résultat.
C'est pourtant clair non ?
Tu as oublier de mettre "using namespace std;"
Et plutot que de demander le temps, demande le nombre d'itérations ce sera plus correct.
Je tiens à préciser que cette méthode ne te donnera pas plus de 7 ou 8 décimales correctes (et encore) même en utilisant des double
Parce que l'ordinateur est limité dans la représentation des nombres. Il ne conserve que un certain nombres de décimales. 16 je crois pour les doubles. Il arrondi la suite.
De plus le passage par la racine n'améliore pas les choses, l'algorithme de calcul de la racine n'étant pas parfait pour une infinité de décimale.
Toute machine quelle qu'elle soit, est une machine finie , elle ne pourra donc calculer qu'aec un nombre fini de décimales.
C'était des connerie ce que j'ai lu alors, que pour faire des tests pour savoir si le processeur chauffais une fois overckloqué qu'il utilisait un calcul de décimals de pi?
Mais alors il utilise pas un "bête" programme comme celui que tu as écrit. Il utilise des algorithmes plus puissants et surtout d'autres bibliothèques permettant de gérer des grands nombres.
Juste pour information avec l'algo que je t'ai donné et sous Excel on obtient:
avec les nombres de 1 à 100: 3.132076532
avec les nombres de 1 à 1000: 3.140618582
avec les nombres de 1 à 5000: 3.140618582
Et on remarque que on a atteint la limite de cet algorithme. Donc 2 décimales. Peut-être que tu as mieux en C++ mais là je peux pas tester.
Oui mais tu as un calcul de factorielle dedans, ce qui veut dire que tu obtients des nombres énormes très rapidement. Et pour être précis tu as besoin de toutes les décimales de ces nombres. Or l'ordinateur ne garde que les 16 (?) premiers chiffres pour le type double. Ce qui veut dire qu'avec 20! = 2432902008176640000 tu dépasses ce nombre. Et avec 20 itérations, tu es très loin d'une bonne valeur pour pi.
De plus il y a une racine de 2 qui doit être hyper-précise sinon tu perds dans tes décimales de pi et finalement tu dois encore inverser le résultat, chose qui se fait pas sans perdre de précision.
J'ai pas de quoi les tester, mais tes 2 formules sont certainement plus mauvaises que celles au-dessus.
EDIT : Le! est la factorielle d'un nombre<math>\(n%21%20%3D%201%2A2%2A3%2A4%2A...%2An\)</math> Exemple: <math>\(5%21%20%3D%201%2A2%2A3%2A4%2A5%20%3D%20120\)</math>
Comment je peux faire pour choper les chiffres avant la virgule et après? existe il une fonction??
Gràace a ça je n'aurais plus de float mais long long, mauvaise idée?
En effet les formules de Freedom, mon ordinateur rend l'âme pour k=3 déjà.
Je trouve pi = 129143562.35 avec la 1ere et pi =-6952288102451570000 avec la 2eme.
Mais à nouveau ceci est uniquement du au fait que les ordinateurs sont des machines finies.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html