salut a tous,
esq le nombre PI = 3.14... est definie dans C++ ou esq il faut que je le definisse moi meme en tant que constante ??
Version imprimable
salut a tous,
esq le nombre PI = 3.14... est definie dans C++ ou esq il faut que je le definisse moi meme en tant que constante ??
Dans <cmath>, certaines implémentations définissent la constante M_PI. Mais bon ce n'est vraiment pas ce qu'il y a de plus dur à faire si ça n'est pas fourni.
La constante M_PI n'est pas standard?Citation:
certaines implémentations définissent la constante M_PI
Non, c'est une extension de certains compilos.
Sinon pi = 4 * atn(1.0).
Attention à ne pas utiliser une macro si on fait ça.Citation:
Sinon pi = 4 * atn(1.0).
Le meilleur moyen est encore de mettre directement sa valeur, c'est vraiment pas le genre de chose difficile à trouver ;)
Ici on trouvera tout, en particulier le poème :
Citation:
Que j'aime à faire connaître ce nombre utile aux sages !
Immortel Archimède, artiste, ingénieur,
Qui de ton jugement peut priser la valeur ?
Pour moi ton problème eut de pareils avantages.
Jadis, mystérieux, un problème bloquait
Tout l'admirable procédé, l'œuvre grandiose
Que Pythagore découvrit aux anciens Grecs.
Ô quadrature ! Vieux tourment du philosophe
Insoluble rondeur, trop longtemps vous avez
Défié Pythagore et ses imitateurs.
Comment intégrer l'espace plan circulaire ?
Former un triangle auquel il équivaudra ?
Nouvelle invention : Archimède inscrira
Dedans un hexagone ; appréciera son aire
Fonction du rayon. Pas trop ne s'y tiendra :
Dédoublera chaque élément antérieur ;
Toujours de l'orbe calculée approchera ;
Définira limite ; enfin, l'arc, le limiteur
De cet inquiétant cercle, ennemi trop rebelle
Professeur, enseignez son problème avec zèle
je pense que tu peut définir la constante pi commme telle:
float pi=3.14159f;
Bonjour,
Pourquoi se faire ch*** avec un calcul ?Citation:
Envoyé par Trap D
Pi est une constante, il suffit de la définir une fois pour toute.
Et pour ce qui est de sa valeur, pas besoin de faire je ne sais combien de sites:
La simple utilisation de la calculatrice la donnera (en tout cas sous Windows).
En général on retient facilement les 20 premières décimales (pas besoin d'en faire une poésie car elle est plus difficile à retenir), reste plus qu'à en faire une constante et le tour est joué...
Avec la méta-programmation, ça coute quasiment rien ...Citation:
Pourquoi se faire ch*** avec un calcul ?
J'attends te voir ton meta-programme en C++ qui calcule pi.Citation:
Envoyé par PRomu@ld
A+
--
Jean-Marc
Je n'aime pas beaucoup le ton employé ...Citation:
J'attends te voir ton meta-programme en C++ qui calcule pi.
Le programme n'est pas de moi:
http://ktd.club.fr/programmation/cpp-metaprog.php#pi
bonjour,
Qu'il soit de toi ou non, "meta-programmation" ou non, tout calcul implique une perte de temps, même si elle est minime.Citation:
Envoyé par PRomu@ld
Et je me répète : pourquoi vouloir obtenir Pi via un calcul alors que c'est une constante ?
(Si ce n'est pour montrer sa culture ?)
La seule justification serait de chercher à en disposer pour des calculs multiprécision dépassant la précision des types définis par le C/C++ ou le compilateur utilisé.
Et même dans ce cas, je pense (en fait : je suis sûr) que la définition d'une constante sera préférable.
Evidemment, si la culture va se nicher dans une formule niveau terminale :lol:Citation:
Envoyé par thewho
Faudrait peut-être arrêter de se la jouer.
Ce n'est pas un méta-programme qui calcule pi, c'est un métaprogramme qui calcule une fonction qui calcule pi. Si c'était un méta-programme qui calculait pi, je pourrais l'utiliser pour dimentioner un tableau ou comme paramètre template. C'est la raison pour laquelle l'exemple paradigmatique du méta-programme:Citation:
Envoyé par PRomu@ld
utilise des enum: parce qu'on peut s'en servir alors dans tous les endroits où l'on désire des entiers. En fait, un meta-programme peut calculer des fonctions, calculer avec des types et avec des entiers. Pas avec des flottants.Code:
1
2
3
4
5
6
7
8
9
10 template<int N> class Factorial { public: enum { value = N * Factorial<N-1>::value }; }; class Factorial<1> { public: enum { value = 1 }; };
Il serait possible d'écrire un méta-programme calculant pi, mais la tâche est loin d'être simple: il faut d'abord se définir un format à base d'entiers (par exemple deux enum, un pour la mantisse l'autre pour l'exposant -- ou plus simple, dire qu'on est en virgule fixe et donc que les entiers sont à diviser par 100000 -- en étant très tordu, tu peux te définir un format à base de types) et toutes les opérations (la division et la multiplication dans le cassimple doit prévoir le recadrage, dans l'autre format toutes les opérations sont à implémenter) et enfin les utiliser pour en faire un meta-programme.
Je suis réellement curieux de voir un tel méta-programme. Comme j'ai apprécié de voir quelqu'un implémenter du calcul en virgule flottante avec TeX. J'admirerais le hack (au sens MIT du terme). Mais je ne considère pas ça comme un moyen pratique d'avoir pi dans un programme. (Le calcul en virgule flottante avec TeX a une utilité par contre, mais rien que comme exercice de style, c'est impressionnant).
Merci pour l'explication claire et détaillée. J'avoue ne pas m'être plongé plus que ça dans la métaprogrammation, je ne programme qu'en C la plupart du temps ..., mais il faudra surement que je m'y interresse parce que théoriquement, c'est un super sujet.Citation:
Ce n'est pas un méta-programme qui calcule pi, c'est un métaprogramme qui calcule une fonction qui calcule pi.
Bonjour,
Je ne me la joue pas, et ça ne répond pas à la question.Citation:
Envoyé par Trap D
Quand quelqu'un me demande la valeur d'une constante, je ne réponds pas en donnant une formule permettant de la calculer.
Et pour préciser : niveau terminale, et encore.
Code:#define PI 3.141592653589793238462643383279502884197
C'est vicieux ca.Citation:
Envoyé par NewbiZ
Le nombre de chiffres donnes laisse penser que c'est tres precis, le f final en fait laisse la precision d'un float. Si on l'assigne a un double, on a une estimation de pi moins precise que ce qu'un double permet d'exprimer.
Bonjour,
Bien vu et résumé.Citation:
Envoyé par Jean-Marc.Bourguet
+1
Quoi ? quel "f" final ?
hihihi
désolé :>
le f à la fin défini en réalité une variable en virgule flottante.
une variable déclaré comme float à une précission de 7chifres ( + ou - ) comprise entre 3.4x10^-38 et 3.4x10^38.
(je sais ça fait beaucoup..)
Non, pas tout à fait, cela veut dire que la variable sera de type float et non pas en double. Le type double est aussi un type de variable en virgule flottante. (le terme double fait référence à la précision).Citation:
le f à la fin défini en réalité une variable en virgule flottante.
Est ce que cette valeur est fixe ou un minimum garanti comme en C ?Citation:
3.4x10^-38 et 3.4x10^38.
La formule permet d'avoir la valeur éxacte de la variable que tu veux, la valeur que tu donnes est une approximation. L'avantage d'une formule est qu'on peut paramètrer la précision du calcul en fonction de ses besoins (ceci est dépendant aussi du type utilisé).Citation:
Quand quelqu'un me demande la valeur d'une constante, je ne réponds pas en donnant une formule permettant de la calculer.
Fondamentalement oui, mais la méta-programmation permet (arrêtez moi si je me trompe) d'effectuer les calculs par le compilateur et donc pas dans lors de l'éxécution. Donc la méta-programmation rend la compilation plus longue mais n'a aucun impact sur le temps d'éxécution.Citation:
Qu'il soit de toi ou non, "meta-programmation" ou non, tout calcul implique une perte de temps, même si elle est minime.
Comme en C.Citation:
Envoyé par PRomu@ld
Oui... mais le temps utilisé à la compilation peut être important.Citation:
Fondamentalement oui, mais la méta-programmation permet (arrêtez moi si je me trompe) d'effectuer les calculs par le compilateur et donc pas dans lors de l'éxécution. Donc la méta-programmation rend la compilation plus longue mais n'a aucun impact sur le temps d'éxécution.
Bonjour,
A moins de faire des calculs en multiprécision, et que cette précision aille très loin, on peut toujours définir une constante correspondant à la précision maximale disponible pour le calcul.Citation:
Envoyé par PRomu@ld
Le compilateur se débrouillera pour ramener le tout à la précision effective des calculs.
Laurent a fait un tuto sur la métaprogrammation ;)Citation:
Envoyé par PRomu@ld
Laurent? Lequel? :lol:Citation:
Envoyé par Miles
Tu pourrais balancer le lien stp?
Merki
Laurent Gomila, http://loulou.developpez.com
Je viens d'aller jeter un coup d'oeuil rapide. Il me semble souffrir de la même confusion (classique quand on travaille au niveau méta d'ailleurs) que la page citée par PRomu@ld entre un méta-programme calculant quelque chose et un méta-programme calculant une fonction calculant cette chose.Citation:
Envoyé par Miles
A noter que l'utilisation principale des méta-programmes, c'est de calculer des fonctions. Souvent pour les mettre sous une forme qui seront mieux optimisée, parfois tellement bien que le calcul sera fait complètement à la compilation par certains compilateurs si la fonction n'a pas d'arguments ou uniquement des arguments constants.
En fait la distinction est plus ou moins faite, puisque je commence par donner les règles basiques de méta-programmation, puis la version calculée par le compilo de la factorielle, puis j'enchaîne en parlant des limitations et en donnant la version qui "calcule une fonction qui calcule la chose", puisque le chapitre en question parle d'optimisation de fonctions mathématiques -- ce qui rejoint le second paragraphe de ta réponse.Citation:
Je viens d'aller jeter un coup d'oeuil rapide. Il me semble souffrir de la même confusion (classique quand on travaille au niveau méta d'ailleurs) que la page citée par PRomu@ld entre un méta-programme calculant quelque chose et un méta-programme calculant une fonction calculant cette chose.
A noter que l'utilisation principale des méta-programmes, c'est de calculer des fonctions. Souvent pour les mettre sous une forme qui seront mieux optimisée, parfois tellement bien que le calcul sera fait complètement à la compilation par certains compilateurs si la fonction n'a pas d'arguments ou uniquement des arguments constants
Ceci-dit ce n'est peut-être pas énoncé assez clairement, faut dire que ça ne l'était pas à 100% dans ma tête lorsque j'ai écrit l'article (il y a maintenant 1 an 1/2).
Et puis j'aborde aussi les autres aspects de la méta-programmation, il ne faut pas les oublier ceux-là ;)
:scarymov:Citation:
Laurent? Lequel? :lol:
Tu pourrais balancer le lien stp?
Merki
J'ai été voir (rapidement à nouveau) le point qui avait lancé la conversation. Ma remarque n'était pas une critique (au sens critique littéraire) complète du tutoriel, ni même de la partie traitant de ce point.Citation:
Et puis j'aborde aussi les autres aspects de la méta-programmation, il ne faut pas les oublier ceux-là ;)
C'était juste pour que ce soit clair pour tout le monde.Citation:
J'ai été voir (rapidement à nouveau) le point qui avait lancé la conversation. Ma remarque n'était pas une critique (au sens critique littéraire) complète du tutoriel, ni même de la partie traitant de ce point.