OVH Cloud OVH Cloud

débutant cos et sin

30 réponses
Avatar
Nico
les fonctions "cos" et "sin" veulent des radians, je n'ai que des degrés à
leur proposer.

comment puis-je m'en sortir ???

merci d'avance

10 réponses

1 2 3
Avatar
Michaël Monerau
Loïc Joly wrote:
Michaël Monerau wrote:
Tiens, ça me fait poser une question ça (que je trouverai peut-être
bête en revenant de manger :p) : comment définir une constante dans
un en-tête standard, à part les enum ? En effet, si on met "const
double", il faudra faire gaffe à l'ODR... et définir la variable
dans un .cpp. Enfin, vous avez compris quoi...


Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :

// <cmath>
extern double const PI;

// Ailleur, à discrétion du compilo :
double const PI = 3.14;


Ce qui me gêne, c'est le 'à discrétion du compilo'. Qu'entends-tu par là ?
Ce que je veux dire, c'est que comme un .h ne peut pas contenir la
définition, et que pour une lib standard, on ne doit pas mettre la défintion
dans *notre* code, il faudrait que le compilo fasse une exception pour
chaque variable... lourd :(
--
<=- Michaël "Cortex" Monerau -=>


Avatar
Loïc Joly
Michaël Monerau wrote:

Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :

// <cmath>
extern double const PI;

// Ailleur, à discrétion du compilo :
double const PI = 3.14;



Ce qui me gêne, c'est le 'à discrétion du compilo'. Qu'entends-tu par là ?
Ce que je veux dire, c'est que comme un .h ne peut pas contenir la
définition, et que pour une lib standard, on ne doit pas mettre la défintion
dans *notre* code, il faudrait que le compilo fasse une exception pour
chaque variable... lourd :(


Quand tu compiles du code, le compilateur va lier le résultat avec une
bibliothèque contenant une partie de la bibliothèque standard, qui n'est
pas toute dans les headers. Par exemple, sous visual C++ 6.0, cette
bibliothèque peut s'appeler selon les options de compilation (debug,
belease, multithread ou non, MFC ou non...) libcmt, libcmtd, msvcrt,
msvcrtd, libcmt, libcmtd.

--
Loïc


Avatar
Alain Naigeon
"Nico" a écrit dans le message news:
bnj58n$1g7$
les fonctions "cos" et "sin" veulent des radians, je n'ai que des degrés à
leur proposer.

comment puis-je m'en sortir ???


2Pi radians = 360 degrés ;
le reste est trop difficile pour une classe de CM2.

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France

Avatar
Bertrand Motuelle
"Loïc Joly" schrieb im Newsbeitrag
news:bnjqo6$3iu$
Michaël Monerau wrote:
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête
en


revenant de manger :p) : comment définir une constante dans un en-tête
standard, à part les enum ? En effet, si on met "const double", il
faudra


faire gaffe à l'ODR... et définir la variable dans un .cpp. Enfin, vous
avez


compris quoi...


Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :

// <cmath>
extern double const PI;

// Ailleur, à discrétion du compilo :
double const PI = 3.14;



Ou plus simplement:

// <cmath>
namespace std
{
double const PI = 3.14;
}

Bertrand.


Avatar
Loïc Joly
Bertrand Motuelle wrote:

// <cmath>
namespace std
{
double const PI = 3.14;
}


Ne voulais-tu pas dire :
// <cmath>
namespace
{
double const PI = 3.14;
}

--
Loïc

Avatar
tib.motuelle
Loïc Joly wrote in message news:<bnka46$doj$...
Bertrand Motuelle wrote:

// <cmath>
namespace std
{
double const PI = 3.14;
}


Ne voulais-tu pas dire :
// <cmath>
namespace
{
double const PI = 3.14;
}


Non non : 3.5/3
<<
A name having namespace scope (3.3.5) has internal linkage if it is
the name of
&#8212; an object, reference, function or function template that is
explicitly declared static or,
&#8212; an object or reference that is explicitly declared const and
neither explicitly declared extern nor
previously declared to have external linkage; or
&#8212; a data member of an anonymous union.




namespace std { double const PI = 3.14; }
ne pose donc pas de problème.

Bertrand.


Avatar
kanze
"Michaël Monerau" wrote in message
news:<YR9nb.27836$...
Philippe Guglielmetti wrote:

On peut aussi utiliser la constante définie dans l'include ad hoc.


qui est ???


M_PI

cherche un "#define M_PI xxx" dans math.h.


Seulement si ta définition de C a été révisée par Posix -- la norme C
(et la norme C++, par référence à la norme C) l'interdit, et la norme
Posix l'exige.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16



Avatar
kanze
"Michaël Monerau" wrote in message
news:<KFdnb.34304$...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.


ya pas dans le mien (VC6), et de toutes manières les #define pour
des constantes mathématiques c'est de horreurs qu'aucun codeur digne
de ce nom n'oserait utiliser, encore moins proposer pour un
standard...


Ah, désolé, je pensais que M_PI était standard...


C'est standard -- la norme Posix:-).

Voir :
http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0011.html#q_8

comme l'a dit Benoît.

#undef M_PI
#define M_PI 4 // MORT AUX MACROS!


Je suis d'accord avec toi. Mais comme je pensais que c'était le
standard... Et dans ce cas-là seulement (c'est peut-être un des
seuls) ça ne me dérange pas que ce soit un define. Après tout, c'est
pas plus mal que le compilo sache que c'est une litérale constante...

Enfin, je t'accorde qu'un const double passerait aussi, voire mieux,
mais il y a des précautions à prendre avec les extern, etc... A part
le faire en enum, pas de solution possible (je n'en vois pas en tout
cas, est-ce que static résoudrait le problème ?). Donc, c'est pas plus
mal un #define.


La seule justification pour le #define, c'est qu'il s'agit d'un en-tête
partagé entre C++ et C. Et encore, dans le cas d'un double, je ne vois
pas le problème avec :

static double const M_PI = 3. ; // La norme ne garantit pas la précision.

Tiens, ça me fait poser une question ça (que je trouverai peut-être
bête en revenant de manger :p) : comment définir une constante dans un
en-tête standard, à part les enum ?


En C++, quelque chose du genre :

static size_t const reponse = 42 ;

fait très bien l'affaire. En C, malheureusement, ce n'est pas une
constante intégrale.

En effet, si on met "const double", il faudra faire gaffe à
l'ODR...


Pas vraiment. En C++, une variable déclarée const est static par
défaut. Il y a donc une instance par unité de compilation, et ça ne gène
en rien si dans un fichier, tu as :
static double const pi = 3. ;
et dans un autre :
static double const pi = 4. ;

(Enfin, en ce qui concerne le compilateur. Si tu utilises une valeur
différente pour pi d'un fichier à l'autre, je me pose des questions sur
la précision de tes résultats.)

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16



Avatar
Richard Delorme

"Michaël Monerau" wrote in message
news:<KFdnb.34304$...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.


ya pas dans le mien (VC6), et de toutes manières les #define pour
des constantes mathématiques c'est de horreurs qu'aucun codeur digne
de ce nom n'oserait utiliser, encore moins proposer pour un
standard...


Ah, désolé, je pensais que M_PI était standard...


C'est standard -- la norme Posix:-).


Presque, M_PI (et les autres M_*) sont des extensions XSI (X/Open System
Interfaces). M_PI peut ne pas être présent dans un système uniquement
conforme à la norme POSIX (c-à-d IEEE Std 1003.1-2001).

--
Richard - qui confond lui aussi régulièrement POSIX et X/Open.




Avatar
kanze
Richard Delorme wrote in message
news:<3f9e6db8$0$6976$...

"Michaël Monerau" wrote in message
news:<KFdnb.34304$...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.


ya pas dans le mien (VC6), et de toutes manières les #define pour
des constantes mathématiques c'est de horreurs qu'aucun codeur
digne de ce nom n'oserait utiliser, encore moins proposer pour un
standard...


Ah, désolé, je pensais que M_PI était standard...


C'est standard -- la norme Posix:-).


Presque, M_PI (et les autres M_*) sont des extensions XSI (X/Open
System Interfaces). M_PI peut ne pas être présent dans un système
uniquement conforme à la norme POSIX (c-à-d IEEE Std 1003.1-2001).


En effet. Je n'avais pas vu le marquage quand je l'ai régardé.
http://www.unix-systems.org/single_unix_specification/, pour ceux à qui
ça intéresse -- les normes Posix et XSI sont embriquées dans le même
document, ce qui peut prêter à confusion parfois.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16





1 2 3