merci
xavier
merci
xavier
Mais de rien. Voici les r�gles:
http://club.developpez.com/regles/
bonjour,
je fais une petite routine qui doit utiliser Pi.
Cette variable est-elle d�finie en C++?
Xavier
Salut !
Oui, va voir du c�t� de math.h, il y a une variable M_PI je crois...
a+
C'est une macro demandee par Posix mais pas par la norme du C++ (ni du C). Je ne sais pas combien cette definition est repandue en dehors des Unix.Envoy� par mathieu_t
Salut
Pour �tre sur qu'elle soit d�finie, tu peux ajouter cette d�finition dans le fichier qui l'utilise (ou dans un header qui convient) :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 #ifndef M_PI #define M_PI 3.14159265358979323846 #endif
En tout cas je l'ai d�j� utilis� sous Windows, avec C++ Builder il me semble...Envoy� par Jean-Marc.Bourguet
Sous VC++ par d�faut elle passe pas, y'a un #define � faire (_USE_MATH_DEFINES).
Histoire d'�tre constructif, tu voudrais pas proposer une solution qui marcherait avec n'importe quel compilateur ?Envoy� par VoidSeer
Je sais, un #define c'est pas top, �a serait mieux de faire quelque chose du type:La solution du define permet juste de rester "plus ou moins" standard (rappel: C'est une macro demandee par Posix), en d�finissant M_PI quand il ne l'est pas...
Code : S�lectionner tout - Visualiser dans une fen�tre � part const double g_Pi = 3.14159265358979323846;
Mais vas y je t'en prie, propose autre chose ....
PI est une constante comme une autre. Y'a d�j� eu pas mal de sujet sur 'comment �viter les #define' pour d�finir des constantes et pourquoi. C'est soit dans la FAQ, soit dans le forum
Oui merci je sais comment �viter les #define, et je suis le premier � dire qu'il faut privilegier les constantes. Mais en pratique, M_PI existe, il est "demand�" par la norme Posix, et quand il est d�fini, c'est g�n�ralement un par
(enfin les fois ou j'ai pu verifier)
Code : S�lectionner tout - Visualiser dans une fen�tre � part #define M_PI 3.14159265358979323846
Apr�s, on peut faire tout un d�bat sur "est-ce qu'il faut red�finir une constante PI dans nos programmes ou utiliser le #define fourni par <math.h>"
Enfin pour r�pondre � la question originale, tu as deux possibilit�s (entres autres surement):
J'esp�re que l'ambiance du post ne te d�couragera pas, c'est un tr�s bon forum
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7 const double g_Pi = 3.14159265358979323846; ou #ifndef M_PI #define M_PI 3.14159265358979323846 #endif![]()
J'ai eu le cas de PI y'a pas longtemps. Effectivement il est pr�sent 'parfois' dans cmath.
Norme POSIX ou pas, il ne fait pas partie du langage en standad et franchement, se battre avec des #ifdef et compagnie j'ai trouv� �a plus que moyen.
<math.h> peut �tre inclus � partir de fichier C aussi, d'o� le #define je pense. Mais si le projet est en C++, alors, une constante perso et un bon copier-coller de la valeur AMHA sont pr�f�rable.
Dans notre biblioth�que, toutes les constantes sont regroup�e en tant que membre statiques d'une classe Math. Ca evite les defines, et les d�clarations qui se baladent.
Oui ok, je suis d'accord, c'est surement pr�f�rable. J'ai propos� �a puisque on parlait justement de #define M_PI qui �tait parfois pr�sent...
Enfin par contre j'aurai mis tout �a dans un namespace plut�t que statique dans une classe (suite � une remarque judicieuse qu'on m'avait faite ici il y a un moment, d'ailleurs).
Par contre je ne comprends pasPourquoi la constante ne marcherait pas aussi en C ? Ou alors est-ce qu'il y a un lien fort C / Posix ?<math.h> peut �tre inclus � partir de fichier C aussi, d'o� le #define je pense
Enfin c'est dommage qu'une biliboth�que "standard" utilise des techniques peu recommendables !
Enfin sinon, ok, let's settle for const double Pi![]()
namespace ou classe, �a ne change rien. Sauf pour la coh�rence globale et la doc.
Personnellement, je n'aime pas avoir des donn�es qui se baladent en dehors d'un objet, mais c'est plus une question de style.
Quand au pourquoi la constante ne marcherais pas en C. Je pense que M_PI a �t� introduit � une �poque ou le mot-clef 'const' n'existait pas en C.
Ben on peut pas d�finir une constante dans un .h.
Ah bah oui![]()
Sinon pour le namespace, c'est vrai que c'est une question de style. Quand on m'avait pr�conis� �a (il y a longtemps), je ne me souviens pas d'arguments particuliers niceau performance ou autre ....
D'ailleurs, est-ce que la recherche dans le forum est "limit�e" en temps ? Je ne retrouve plus le topic en question ....![]()
Partager