Il me semble que les opérateurs * et / ont la même priorité. Mais alors que
vaut 1.0*2/4 ?
Si c'est évalué comme ceci (1.0*2)/4 ca vaut 0.5, si c'est évalué comme cela
1.0*(2/4) ca vaut 0.0...
Il me semble que les opérateurs * et / ont la même priorité. Mais alors que vaut 1.0*2/4 ? Si c'est évalué comme ceci (1.0*2)/4 ca vaut 0.5, si c'est évalué comme cela 1.0*(2/4) ca vaut 0.0...
Gauche à droite. Donc comme (1.0*2)/4 et ça vaut 0.5.
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans news:3f04af35$0$11561$626a54ce@news.free.fr, Vincent
Il me semble que les opérateurs * et / ont la même priorité. Mais
alors que vaut 1.0*2/4 ?
Si c'est évalué comme ceci (1.0*2)/4 ca vaut 0.5, si c'est évalué
comme cela
1.0*(2/4) ca vaut 0.0...
Gauche à droite. Donc comme (1.0*2)/4 et ça vaut 0.5.
--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Il me semble que les opérateurs * et / ont la même priorité. Mais alors que vaut 1.0*2/4 ? Si c'est évalué comme ceci (1.0*2)/4 ca vaut 0.5, si c'est évalué comme cela 1.0*(2/4) ca vaut 0.0...
Gauche à droite. Donc comme (1.0*2)/4 et ça vaut 0.5.
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
amerio
Il me semble que les opérateurs * et / ont la même priorité. Mais alors que
vaut 1.0*2/4 ? Si c'est évalué comme ceci (1.0*2)/4 ca vaut 0.5, si c'est évalué comme cela
1.0*(2/4) ca vaut 0.0...
1*(2/4)=1*(0.5)=0.5 ......
* et / sont "permutable" en math : a*b/c = a/c*b = b/c*a = .... Sinon, l'associativité de-gauche-à-droite prime si les opérateurs ont la même priorité. a*b/c est évalué comme (a*b)/c (mais le compilo peut changer ca, je crois, ds certains cas)
Cela dis, même si a*b/c est équivalent en math à (a*b)/c et a*(b/c), en info ce n'est plus forcément le cas, à cause des pb de précision. Ce sera le cas si a, b, c n'ont pas tous les trois le même ordre de grandeur (genre 1e20, 4e19 et 5e-2 ....)
Il me semble que les opérateurs * et / ont la même priorité. Mais alors
que
vaut 1.0*2/4 ?
Si c'est évalué comme ceci (1.0*2)/4 ca vaut 0.5, si c'est évalué comme
cela
1.0*(2/4) ca vaut 0.0...
1*(2/4)=1*(0.5)=0.5 ......
* et / sont "permutable" en math : a*b/c = a/c*b = b/c*a = ....
Sinon, l'associativité de-gauche-à-droite prime si les opérateurs ont la
même priorité.
a*b/c est évalué comme (a*b)/c (mais le compilo peut changer ca, je crois,
ds certains cas)
Cela dis, même si a*b/c est équivalent en math à (a*b)/c et a*(b/c), en info
ce n'est plus forcément le cas, à cause des pb de précision. Ce sera le cas
si a, b, c n'ont pas tous les trois le même ordre de grandeur (genre 1e20,
4e19 et 5e-2 ....)
Il me semble que les opérateurs * et / ont la même priorité. Mais alors que
vaut 1.0*2/4 ? Si c'est évalué comme ceci (1.0*2)/4 ca vaut 0.5, si c'est évalué comme cela
1.0*(2/4) ca vaut 0.0...
1*(2/4)=1*(0.5)=0.5 ......
* et / sont "permutable" en math : a*b/c = a/c*b = b/c*a = .... Sinon, l'associativité de-gauche-à-droite prime si les opérateurs ont la même priorité. a*b/c est évalué comme (a*b)/c (mais le compilo peut changer ca, je crois, ds certains cas)
Cela dis, même si a*b/c est équivalent en math à (a*b)/c et a*(b/c), en info ce n'est plus forcément le cas, à cause des pb de précision. Ce sera le cas si a, b, c n'ont pas tous les trois le même ordre de grandeur (genre 1e20, 4e19 et 5e-2 ....)
Frederic Py
amerio wrote:
1*(2/4)=1*(0.5)=0.5 ......
* et / sont "permutable" en math : a*b/c = a/c*b = b/c*a = .... Sinon, l'associativité de-gauche-à-droite prime si les opérateurs ont la même priorité. En mathemeaique il existe l'operateur de division entiere et en C/C++
(int)/(int) fait que / est interprete comme l'operateur de division entiere
donc
1.0*(2/4) ne respecte pas la regle d'associativite car la multiplication est sur les flottants par contre la division est sur les entiers donc
1.0*(2/4) = 1.0*0 = 0.0
Il ne fautr pas confondre mathematiques "classiques" et informatique ... Si un informaticien etait un mathematicien ca se saurait :)
-- Frederic Py
amerio wrote:
1*(2/4)=1*(0.5)=0.5 ......
* et / sont "permutable" en math : a*b/c = a/c*b = b/c*a = ....
Sinon, l'associativité de-gauche-à-droite prime si les opérateurs ont la
même priorité.
En mathemeaique il existe l'operateur de division entiere et en C/C++
(int)/(int) fait que / est interprete comme l'operateur de division entiere
donc
1.0*(2/4) ne respecte pas la regle d'associativite car la multiplication
est sur les flottants par contre la division est sur les entiers donc
1.0*(2/4) = 1.0*0 = 0.0
Il ne fautr pas confondre mathematiques "classiques" et informatique ...
Si un informaticien etait un mathematicien ca se saurait :)
* et / sont "permutable" en math : a*b/c = a/c*b = b/c*a = .... Sinon, l'associativité de-gauche-à-droite prime si les opérateurs ont la même priorité. En mathemeaique il existe l'operateur de division entiere et en C/C++
(int)/(int) fait que / est interprete comme l'operateur de division entiere
donc
1.0*(2/4) ne respecte pas la regle d'associativite car la multiplication est sur les flottants par contre la division est sur les entiers donc
1.0*(2/4) = 1.0*0 = 0.0
Il ne fautr pas confondre mathematiques "classiques" et informatique ... Si un informaticien etait un mathematicien ca se saurait :)
-- Frederic Py
M.B.
Oui.
Une bonne regle de programmation consiste a ne pas melanger entiers et reels dans la meme expression.
Et le compilateur devrait sortir un 'warning'
MB
"Frederic Py" a écrit dans le message news: be3avf$gcm$
1.0*(2/4) = 1.0*0 = 0.0
Oui.
Une bonne regle de programmation consiste a ne pas
melanger entiers et reels dans la meme expression.
Et le compilateur devrait sortir un 'warning'
MB
"Frederic Py" <fpy.sospam@laas.rf> a écrit dans le message news:
be3avf$gcm$1@kane.laas.fr...
Ben non, c'est des nombres de la forme m*b^e (à quelques détails pratiques pret), avec b fixé, et m et e des entiers _informatiques_, donc on ne peut pas représenter tout réel avec un double: - le plus grand réel représentable est obtenu en donnant à m et e les plus grandes valeurs possibles; - le plus petit réel positif non nul représentable est obtenu en donnant à m la valeur 1 et à e la plus petite valeur possible. - on ne peut pas représenter un réel dont le developpement en base b est infini.
Ben non, c'est des nombres de la forme m*b^e (à quelques détails pratiques
pret), avec b fixé, et m et e des entiers _informatiques_, donc on ne peut
pas représenter tout réel avec un double:
- le plus grand réel représentable est obtenu en donnant à m et e les plus
grandes valeurs possibles;
- le plus petit réel positif non nul représentable est obtenu en donnant à
m la valeur 1 et à e la plus petite valeur possible.
- on ne peut pas représenter un réel dont le developpement en base b est
infini.
Ben non, c'est des nombres de la forme m*b^e (à quelques détails pratiques pret), avec b fixé, et m et e des entiers _informatiques_, donc on ne peut pas représenter tout réel avec un double: - le plus grand réel représentable est obtenu en donnant à m et e les plus grandes valeurs possibles; - le plus petit réel positif non nul représentable est obtenu en donnant à m la valeur 1 et à e la plus petite valeur possible. - on ne peut pas représenter un réel dont le developpement en base b est infini.
Vincent Jacques
Dominique Baldo
Christophe Lephay nous disait
De fait, tu n'as pas la garantie que 2.0/2.0 donne bien 1.0 je veux bien que les compilos soient parfois tordus et les
microprocesseurs buggés, mais je voudrais bien que tu me présentes le compilo qui donne un résultat différent de 1.0 d'autant que la réprésentation interne de 2.0 est "parfaite" en float ou double
Christophe Lephay nous disait
De fait, tu n'as pas la garantie que 2.0/2.0 donne bien 1.0
je veux bien que les compilos soient parfois tordus et les
microprocesseurs buggés, mais je voudrais bien que tu me présentes le
compilo qui donne un résultat différent de 1.0 d'autant que la
réprésentation interne de 2.0 est "parfaite" en float ou double
De fait, tu n'as pas la garantie que 2.0/2.0 donne bien 1.0 je veux bien que les compilos soient parfois tordus et les
microprocesseurs buggés, mais je voudrais bien que tu me présentes le compilo qui donne un résultat différent de 1.0 d'autant que la réprésentation interne de 2.0 est "parfaite" en float ou double
Vincent Jacques
"M.B." écrivait news:be6ajs$lsv$:
Je sais, merci.
On peut jouer sur les mots.
Yep, désolé, j'ai pris au premier degré... ;-) Peut-etre ma réponse aura servi à quelqu'un d'autre...
Yep, désolé, j'ai pris au premier degré... ;-) Peut-etre ma réponse aura servi à quelqu'un d'autre...
-- Vincent Jacques
Christophe Lephay
"M.B." a écrit dans le message de news:be6ajs$lsv$
float, double ... c'est pas des nombres reels ca ? Ben non
On peut jouer sur les mots.
C'est pas jouer sur les mots, vu que certaines propriétés des reels ne sont pas maintenues avec les float ou double, à savoir il n'est pas garanti que (a*b)/c soit égal à a*(b/c)...
Chris
"M.B." <mbinder@magicnet.com> a écrit dans le message de
news:be6ajs$lsv$1@news-reader5.wanadoo.fr...
float, double ...
c'est pas des nombres reels ca ?
Ben non
On peut jouer sur les mots.
C'est pas jouer sur les mots, vu que certaines propriétés des reels ne sont
pas maintenues avec les float ou double, à savoir il n'est pas garanti que
(a*b)/c soit égal à a*(b/c)...
"M.B." a écrit dans le message de news:be6ajs$lsv$
float, double ... c'est pas des nombres reels ca ? Ben non
On peut jouer sur les mots.
C'est pas jouer sur les mots, vu que certaines propriétés des reels ne sont pas maintenues avec les float ou double, à savoir il n'est pas garanti que (a*b)/c soit égal à a*(b/c)...
Chris
Christophe Lephay
"Dominique Baldo" a écrit dans le message de news:
Christophe Lephay nous disait
De fait, tu n'as pas la garantie que 2.0/2.0 donne bien 1.0 je veux bien que les compilos soient parfois tordus et les
microprocesseurs buggés, mais je voudrais bien que tu me présentes le compilo qui donne un résultat différent de 1.0 d'autant que la réprésentation interne de 2.0 est "parfaite" en float ou double
J'ai mal formulé mon propos. J'aurais du dire qu'on n'a pas la garantie que l'expression a/a soit égale à 1, avec a étant une expression de type float ou double...
Chris
"Dominique Baldo" <dom@wanadoo.fr> a écrit dans le message de
news:MPG.1970cd25728f83949898e5@news.free.fr...
Christophe Lephay nous disait
De fait, tu n'as pas la garantie que 2.0/2.0 donne bien 1.0
je veux bien que les compilos soient parfois tordus et les
microprocesseurs buggés, mais je voudrais bien que tu me présentes le
compilo qui donne un résultat différent de 1.0 d'autant que la
réprésentation interne de 2.0 est "parfaite" en float ou double
J'ai mal formulé mon propos. J'aurais du dire qu'on n'a pas la garantie que
l'expression a/a soit égale à 1, avec a étant une expression de type float
ou double...
"Dominique Baldo" a écrit dans le message de news:
Christophe Lephay nous disait
De fait, tu n'as pas la garantie que 2.0/2.0 donne bien 1.0 je veux bien que les compilos soient parfois tordus et les
microprocesseurs buggés, mais je voudrais bien que tu me présentes le compilo qui donne un résultat différent de 1.0 d'autant que la réprésentation interne de 2.0 est "parfaite" en float ou double
J'ai mal formulé mon propos. J'aurais du dire qu'on n'a pas la garantie que l'expression a/a soit égale à 1, avec a étant une expression de type float ou double...