| View previous topic :: View next topic |
| Author |
Message |
Vincent Lascaux Guest
|
Posted: Thu Jul 03, 2003 10:33 pm Post subject: Priorité de * et / |
|
|
Bonjour,
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...
Merci
--
Vincent
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Thu Jul 03, 2003 11:04 pm Post subject: Re: Priorité de * et / |
|
|
Dans news:3f04af35$0$11561$626a54ce (AT) news (DOT) free.fr, Vincent
Lascaux <nospam (AT) nospam (DOT) org> a écrit :
| Quote: | 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 [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
amerio Guest
|
Posted: Fri Jul 04, 2003 6:26 am Post subject: Re: Priorité de * et / |
|
|
| Quote: | 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 ....)
|
|
| Back to top |
|
 |
Frederic Py Guest
|
Posted: Fri Jul 04, 2003 7:39 am Post subject: Re: Priorité de * et / |
|
|
amerio wrote:
| Quote: |
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
|
|
| Back to top |
|
 |
M.B. Guest
|
Posted: Fri Jul 04, 2003 8:57 am Post subject: Re: Priorité de * et / |
|
|
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 (AT) laas (DOT) rf> a écrit dans le message news:
be3avf$gcm$1 (AT) kane (DOT) laas.fr...
| Quote: |
1.0*(2/4) = 1.0*0 = 0.0
|
|
|
| Back to top |
|
 |
M.B. Guest
|
Posted: Sat Jul 05, 2003 8:34 am Post subject: Re: Priorité de * et / |
|
|
float, double ...
c'est pas des nombres reels ca ?
MB
<kanze (AT) gabi-soft (DOT) fr> a écrit dans le message news:
[email]d6652001.0307040659.31a48ba0 (AT) posting (DOT) google.com[/email]...
| Quote: | (Et il n'y a pas de réels en C/C++.)
|
|
|
| Back to top |
|
 |
Vincent Jacques Guest
|
Posted: Sat Jul 05, 2003 9:06 am Post subject: Re: Priorité de * et / |
|
|
"M.B." <mbinder (AT) magicnet (DOT) com> écrivait news:be6295$3bk$1@news-
reader3.wanadoo.fr:
| Quote: | float, double ...
c'est pas des nombres reels ca ?
|
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
|
|
| Back to top |
|
 |
Dominique Baldo Guest
|
Posted: Sat Jul 05, 2003 10:55 am Post subject: Re: Priorité de * et / |
|
|
Christophe Lephay nous disait
| Quote: | 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
|
|
| Back to top |
|
 |
Vincent Jacques Guest
|
Posted: Sat Jul 05, 2003 11:05 am Post subject: Re: Priorité de * et / |
|
|
"M.B." <mbinder (AT) magicnet (DOT) com> écrivait
news:be6ajs$lsv$1 (AT) news-reader5 (DOT) wanadoo.fr:
| Quote: | 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...
--
Vincent Jacques
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Sat Jul 05, 2003 11:22 am Post subject: Re: Priorité de * et / |
|
|
"M.B." <mbinder (AT) magicnet (DOT) com> a écrit dans le message de
news:be6ajs$lsv$1 (AT) news-reader5 (DOT) wanadoo.fr...
| Quote: | 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
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Sat Jul 05, 2003 11:24 am Post subject: Re: Priorité de * et / |
|
|
"Dominique Baldo" <dom (AT) wanadoo (DOT) fr> a écrit dans le message de
news:MPG.1970cd25728f83949898e5 (AT) news (DOT) free.fr...
| Quote: | 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
|
|
| Back to top |
|
 |
M.B. Guest
|
Posted: Sat Jul 05, 2003 1:33 pm Post subject: Re: Priorité de * et / |
|
|
C'est innerant a la precision de la numerisation
des donnees.
C'est le fonctionnement d'un ordinateur (Von Neumann)
qui veut ca.
C'est vrai pour tous les langages.
MB
"Christophe Lephay" <christophe-lephay (AT) wanadoo (DOT) fr> a écrit dans le message
news: be6c7s$s75$1 (AT) news-reader4 (DOT) wanadoo.fr...
| Quote: | "M.B." <mbinder (AT) magicnet (DOT) com> a écrit dans le message de
news:be6ajs$lsv$1 (AT) news-reader5 (DOT) 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)...
Chris
|
|
|
| Back to top |
|
 |
HelioS Guest
|
Posted: Sat Jul 05, 2003 1:39 pm Post subject: Re: Priorité de * et / |
|
|
La précedence de quelques opérateurs (de "C++ How to Program" par Deitel &
Deitel):
:: (gauche à droite)
() [] . -> ++ (post) -- (post) typeid static_cast<>
dynamic_cast<> reinterpret_cast<> const_cast<> (gauche à droite)
++ (pre) -- (pre) + - ! ~ sizeof & * new new[]
delete delete[] (droite à gauche)
..* ->* (gauche à droite)
* / % (gauche à droite)
+ - (gauche à droite)
<< >> (gauche à droite)
< <= > >= (gauche à droite)
== != (gauche à droite)
& (gauche à droite)
^ (gauche à droite)
&& (gauche à droite)
| Quote: | | (gauche à droite)
|
?: (droite à gauche)
= += -= *= /= %= &= ^= |= <<= >>= (droite à
gauche)
, (gauche à droite)
HelioS
|
|
| Back to top |
|
 |
Erwann ABALEA Guest
|
Posted: Sat Jul 05, 2003 10:08 pm Post subject: Re: Priorité de * et / |
|
|
On Sat, 5 Jul 2003, Vincent Lascaux wrote:
| Quote: | Un cerveau = 2 hemispheres.....
donc :
(un cerveau/2)*2 = (1 hémisphère)*2 = un cerveau
et
un cerveau(*2/2) = un cerveau*1 = (2 hémisphères)*1 = un cerveau (j'ai
pousse la reflexion la !!:)
Et quel est l'interet de publier ca ?????????? si ce n'est pour prouver
|
[...]
Mais? Toi aussi t'es devenu une burne? ;)
Au secours! fclc++ est envahi par des trolleurs! :)
--
Erwann ABALEA <erwann (AT) abalea (DOT) com> - RSA PGP Key ID: 0x2D0EABD5
-----
je comprend pas ce a quoi sert ce site ou cette boite a lettre.J'y voit
plein de messages et autres anneries alors si tu pouvais m'aider et me
repondre pour m'expliquer a qui et a quoi servent toutes ses phrases
-+- DD in http://neuneu.mine.nu : Allo Huston, nous avons un neuneu. -+-
|
|
| Back to top |
|
 |
Mickael Pointier Guest
|
Posted: Mon Jul 07, 2003 8:24 am Post subject: Re: Priorité de * et / |
|
|
| Quote: | 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)...
C'est innerant a la precision de la numerisation
des donnees.
C'est le fonctionnement d'un ordinateur (Von Neumann)
qui veut ca.
C'est vrai pour tous les langages.
|
Non, il existe des langages qui conservent l'expression sans en évaluer
le résultat et qui appliquent les règles d'algèbre lors des calculs
histoire de ne pas perdre en précision.
Alors après au niveau performances... ;)
Mais c'est juste pour signaler que ca n'est pas "intrinsèquement du au
fonctionnement d'un ordinateur".
Mike
|
|
| Back to top |
|
 |
|