je crains fort d'être hors charte, mais bon tant pis pour moi, je pose
quand même ma question.
dans math.h, j'ai ceci :
#if defined __USE_BSD || defined __USE_XOPEN
...
# define M_PI 3.14159265358979323846 /* pi */
...
#endif
puis plus loin :
#ifdef __USE_GNU
...
# define M_PIl 3.1415926535897932384626433832795029L /* pi */
...
#endif
Et dans mon programme, j'ai besoin d'une constante PI, même sans grande
précision (donc M_PI suffirait, mais 3.14 serait un peu juste). Hors, que
j'utilise M_PI ou M_PIl, le compilateur me dit :
pqtorus.c:40: error:`M_PIl' undeclared (first use in this function)
J'ai bien sur #includé math.h.
Dois-je définir l'une ou l'autre des constantes __USE_BSD, __USE_XOPEN,
__USE_GNU ? Ça ne me paraîtrait pas très propre ... Ou bien s'agit-il
d'une option de compilation qui me manque ?
Pour info j'utilise -Wall -std=c99 avec gcc3.3.4 (sous Debian si ça peut
avoir une quelconque importance).
Merci d'avance pour toute aide qui me serait précieuse.
--
Florent "flure" C.
Décrypter l'@ pour répondre
Coders don't die, they just JMP without RET !
Le Sat, 18 Sep 2004 15:56:34 +0200, Anthony Fleury a écrit :
Jean-Marc wrote:
Au passage, et pour répondre à un post précédent, faire un #define M_PI 4 *atan(1.0) me semblait aussi une trèès mauvaise idée! pourquoi obliger le programme à recalculer PI à chaque fois ? PI me semble avoir une valeur bien constante, non ?
C'est en effet la plus mauvaise méthode pour pallier au fait que l'ont ait pas le droit de définir des variables globales avec autre chose que des constantes littérales en C.
J'espère qu'il n'y a pas de contre-indications à cela ?
Cependant, si Pi est utilisé dans des gros calculs (donc propagation rapide de l'erreur) et un nombre raisonnable de fois, ca peut être une solution. Le mieux est quand même, si la constante est utilisée dans une fonction précise, de la définir en local, et là on ne la calcule qu'une fois.
Je suis bien d'accord, mais dans mon cas la contrainte n'est pas la précision, mais la performance (animation 3D), donc je ne peux pas me permettre de calculer pi :)
-- Florent "flure" C. Décrypter l'@ pour répondre Coders don't die, they just JMP without RET !
Le Sat, 18 Sep 2004 15:56:34 +0200, Anthony Fleury a écrit :
Jean-Marc wrote:
Au passage, et pour répondre à un post précédent, faire un #define
M_PI 4 *atan(1.0)
me semblait aussi une trèès mauvaise idée! pourquoi obliger le
programme à recalculer PI à chaque fois ? PI me semble avoir une
valeur bien constante, non ?
C'est en effet la plus mauvaise méthode pour pallier au fait que l'ont
ait pas le droit de définir des variables globales avec autre chose que
des constantes littérales en C.
J'espère qu'il n'y a pas de contre-indications à cela ?
Cependant, si Pi est utilisé dans des gros calculs (donc propagation
rapide de l'erreur) et un nombre raisonnable de fois, ca peut être une
solution. Le mieux est quand même, si la constante est utilisée dans une
fonction précise, de la définir en local, et là on ne la calcule qu'une
fois.
Je suis bien d'accord, mais dans mon cas la contrainte n'est pas la
précision, mais la performance (animation 3D), donc je ne peux pas me
permettre de calculer pi :)
--
Florent "flure" C.
Décrypter l'@ pour répondre
Coders don't die, they just JMP without RET !
Le Sat, 18 Sep 2004 15:56:34 +0200, Anthony Fleury a écrit :
Jean-Marc wrote:
Au passage, et pour répondre à un post précédent, faire un #define M_PI 4 *atan(1.0) me semblait aussi une trèès mauvaise idée! pourquoi obliger le programme à recalculer PI à chaque fois ? PI me semble avoir une valeur bien constante, non ?
C'est en effet la plus mauvaise méthode pour pallier au fait que l'ont ait pas le droit de définir des variables globales avec autre chose que des constantes littérales en C.
J'espère qu'il n'y a pas de contre-indications à cela ?
Cependant, si Pi est utilisé dans des gros calculs (donc propagation rapide de l'erreur) et un nombre raisonnable de fois, ca peut être une solution. Le mieux est quand même, si la constante est utilisée dans une fonction précise, de la définir en local, et là on ne la calcule qu'une fois.
Je suis bien d'accord, mais dans mon cas la contrainte n'est pas la précision, mais la performance (animation 3D), donc je ne peux pas me permettre de calculer pi :)
-- Florent "flure" C. Décrypter l'@ pour répondre Coders don't die, they just JMP without RET !
Jean-Marc
"Florent 'flure' C." a écrit dans le message de news:
J'espère qu'il n'y a pas de contre-indications à cela ?
Définir un symbole dont il est connu (et même attendu) qu'il est communément utilisé comme macro à autre chose qu'une macro me semble de très mauvais style.
La seule circonstance atténuante est que la valeur est la même, mais bon...
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
J'espère qu'il n'y a pas de contre-indications à cela ?
Définir un symbole dont il est connu (et même attendu) qu'il
est communément utilisé comme macro à autre chose qu'une
macro me semble de très mauvais style.
La seule circonstance atténuante est que la valeur est la
même, mais bon...
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
J'espère qu'il n'y a pas de contre-indications à cela ?
Définir un symbole dont il est connu (et même attendu) qu'il est communément utilisé comme macro à autre chose qu'une macro me semble de très mauvais style.
La seule circonstance atténuante est que la valeur est la même, mais bon...
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Emmanuel Delahaye
Anthony Fleury wrote on 18/09/04 :
#include <math.h>
(static) const double pi = 4*atan(1.0);
Pas du C.
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Anthony Fleury wrote on 18/09/04 :
#include <math.h>
(static) const double pi = 4*atan(1.0);
Pas du C.
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Emmanuel Delahaye
Florent 'flure' C. wrote on 18/09/04 :
Hello, c'est normal, ce n'est pas autorisé d'initialiser quelque chose avec autre chose qu'une constante. (mon compilateur me dit: 'initializer is not a constant'
pour quoi faire super compliqué, qd on peut faire: static const double monPI = 3.141592657;
En fait, comme c'est une constante dont j'ai besoin dans la plupart des fichiers de mon (petit) projet, je voulais utiliser la constante de math.h comme il me semblait avoir toujours fait jusqu'à maintenant ... Je vais néanmoins opter pour cette option ... Par contre, est-ce une mauvaise idée d'appeler cette constante M_PI, comme dans math.h ?
Aucun problème:
#ifndef M_PI #define M_PI 3.141592657 #endif
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Florent 'flure' C. wrote on 18/09/04 :
Hello,
c'est normal, ce n'est pas autorisé d'initialiser quelque chose avec
autre chose qu'une constante.
(mon compilateur me dit: 'initializer is not a constant'
pour quoi faire super compliqué, qd on peut faire: static const double
monPI = 3.141592657;
En fait, comme c'est une constante dont j'ai besoin dans la plupart des
fichiers de mon (petit) projet, je voulais utiliser la constante de math.h
comme il me semblait avoir toujours fait jusqu'à maintenant ...
Je vais néanmoins opter pour cette option ...
Par contre, est-ce une mauvaise idée d'appeler cette constante M_PI,
comme dans math.h ?
Aucun problème:
#ifndef M_PI
#define M_PI 3.141592657
#endif
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
Hello, c'est normal, ce n'est pas autorisé d'initialiser quelque chose avec autre chose qu'une constante. (mon compilateur me dit: 'initializer is not a constant'
pour quoi faire super compliqué, qd on peut faire: static const double monPI = 3.141592657;
En fait, comme c'est une constante dont j'ai besoin dans la plupart des fichiers de mon (petit) projet, je voulais utiliser la constante de math.h comme il me semblait avoir toujours fait jusqu'à maintenant ... Je vais néanmoins opter pour cette option ... Par contre, est-ce une mauvaise idée d'appeler cette constante M_PI, comme dans math.h ?
Aucun problème:
#ifndef M_PI #define M_PI 3.141592657 #endif
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
Chez moi, cet include s'appelerai pi.h. Comme ça, c'est clair...
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Emmanuel Delahaye
(supersedes )
Florent 'flure' C. wrote on 18/09/04 :
Hello, c'est normal, ce n'est pas autorisé d'initialiser quelque chose avec autre chose qu'une constante. (mon compilateur me dit: 'initializer is not a constant'
pour quoi faire super compliqué, qd on peut faire: static const double monPI = 3.141592657;
En fait, comme c'est une constante dont j'ai besoin dans la plupart des fichiers de mon (petit) projet, je voulais utiliser la constante de math.h comme il me semblait avoir toujours fait jusqu'à maintenant ... Je vais néanmoins opter pour cette option ... Par contre, est-ce une mauvaise idée d'appeler cette constante M_PI, comme dans math.h ?
Aucun problème:
#ifndef M_PI #define M_PI 3.14159... #endif
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
Hello,
c'est normal, ce n'est pas autorisé d'initialiser quelque chose avec
autre chose qu'une constante.
(mon compilateur me dit: 'initializer is not a constant'
pour quoi faire super compliqué, qd on peut faire: static const double
monPI = 3.141592657;
En fait, comme c'est une constante dont j'ai besoin dans la plupart des
fichiers de mon (petit) projet, je voulais utiliser la constante de math.h
comme il me semblait avoir toujours fait jusqu'à maintenant ...
Je vais néanmoins opter pour cette option ...
Par contre, est-ce une mauvaise idée d'appeler cette constante M_PI,
comme dans math.h ?
Aucun problème:
#ifndef M_PI
#define M_PI 3.14159...
#endif
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
Hello, c'est normal, ce n'est pas autorisé d'initialiser quelque chose avec autre chose qu'une constante. (mon compilateur me dit: 'initializer is not a constant'
pour quoi faire super compliqué, qd on peut faire: static const double monPI = 3.141592657;
En fait, comme c'est une constante dont j'ai besoin dans la plupart des fichiers de mon (petit) projet, je voulais utiliser la constante de math.h comme il me semblait avoir toujours fait jusqu'à maintenant ... Je vais néanmoins opter pour cette option ... Par contre, est-ce une mauvaise idée d'appeler cette constante M_PI, comme dans math.h ?
Aucun problème:
#ifndef M_PI #define M_PI 3.14159... #endif
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Jean Claude Calvez
"Richard Delorme" a écrit dans le message de news: 414c459b$0$15754$
static const double monPI = 3.141592657;
TonPi a une drôle de valeur... C'est plutôt, en arrondissant : 3.141592654 Pour plus de précision : http://www.joyofpi.com/pi.html
Cette adresse internet n'est pas indispensable pour connaître la connaître la valeur de pi à 10 chiffres. N'importe quelle calculatrice scientifique fait l'affaire. :-))
-- Richard
JCC
"Richard Delorme" <abulmo@nospam.fr> a écrit dans le message de news:
414c459b$0$15754$7a628cd7@news.club-internet.fr...
static const double monPI = 3.141592657;
TonPi a une drôle de valeur...
C'est plutôt, en arrondissant : 3.141592654
Pour plus de précision :
http://www.joyofpi.com/pi.html
Cette adresse internet n'est pas indispensable pour
connaître la connaître la valeur de pi à 10 chiffres.
N'importe quelle calculatrice scientifique fait
l'affaire. :-))
"Richard Delorme" a écrit dans le message de news: 414c459b$0$15754$
static const double monPI = 3.141592657;
TonPi a une drôle de valeur... C'est plutôt, en arrondissant : 3.141592654 Pour plus de précision : http://www.joyofpi.com/pi.html
Cette adresse internet n'est pas indispensable pour connaître la connaître la valeur de pi à 10 chiffres. N'importe quelle calculatrice scientifique fait l'affaire. :-))
-- Richard
JCC
Vincent Lefevre
Dans l'article <414c2d80$0$12988$, Anthony Fleury écrit:
(static) const double pi = 4*atan(1.0);
Outre le fait que ce n'est pas du C, c'est idiot. Un simple #define utilisant la valeur en dur (avec suffissamment de chiffres) est suffisant en pratique.
Dans l'article <414c2d80$0$12988$626a14ce@news.free.fr>,
Anthony Fleury <fleury_anthony@_hotmail.com_> écrit:
(static) const double pi = 4*atan(1.0);
Outre le fait que ce n'est pas du C, c'est idiot. Un simple #define
utilisant la valeur en dur (avec suffissamment de chiffres) est
suffisant en pratique.
Dans l'article <414c2d80$0$12988$, Anthony Fleury écrit:
(static) const double pi = 4*atan(1.0);
Outre le fait que ce n'est pas du C, c'est idiot. Un simple #define utilisant la valeur en dur (avec suffissamment de chiffres) est suffisant en pratique.
Dans l'article <cihtnp$sor$, Jean Claude Calvez écrit:
"Richard Delorme" a écrit dans le message de news: 414c459b$0$15754$
C'est plutôt, en arrondissant : 3.141592654 Pour plus de précision : http://www.joyofpi.com/pi.html
Cette adresse internet n'est pas indispensable pour connaître la connaître la valeur de pi à 10 chiffres. N'importe quelle calculatrice scientifique fait l'affaire. :-))
Pour la double précision, il faut 17 chiffres. Et peu de calculatrices savent les donner.
Dans l'article <cihtnp$sor$1@news-reader1.wanadoo.fr>,
Jean Claude Calvez <jecalvez@wanadoo.fr> écrit:
"Richard Delorme" <abulmo@nospam.fr> a écrit dans le message de news:
414c459b$0$15754$7a628cd7@news.club-internet.fr...
C'est plutôt, en arrondissant : 3.141592654
Pour plus de précision :
http://www.joyofpi.com/pi.html
Cette adresse internet n'est pas indispensable pour
connaître la connaître la valeur de pi à 10 chiffres.
N'importe quelle calculatrice scientifique fait
l'affaire. :-))
Pour la double précision, il faut 17 chiffres. Et peu de calculatrices
savent les donner.
Dans l'article <cihtnp$sor$, Jean Claude Calvez écrit:
"Richard Delorme" a écrit dans le message de news: 414c459b$0$15754$
C'est plutôt, en arrondissant : 3.141592654 Pour plus de précision : http://www.joyofpi.com/pi.html
Cette adresse internet n'est pas indispensable pour connaître la connaître la valeur de pi à 10 chiffres. N'importe quelle calculatrice scientifique fait l'affaire. :-))
Pour la double précision, il faut 17 chiffres. Et peu de calculatrices savent les donner.