OVH Cloud OVH Cloud

que fait cette ligne

3 réponses
Avatar
no.bcausse.spam
rtb = f < 0.0 ? ( dx=x2-x1,x1 ) : ( dx=x1-x2,x2 );

le test c'est ok mais ",x1" ou ",x2" c'est quoi?

--
bruno Causse
http://perso.wanadoo.fr/othello

3 réponses

Avatar
Julien Lamy
rtb = f < 0.0 ? ( dx=x2-x1,x1 ) : ( dx=x1-x2,x2 );

le test c'est ok mais ",x1" ou ",x2" c'est quoi?



Il s'agit de l'opérateur , (virgule), en général assez peu utilisé sauf
dans les boucles for.
L'expression a,b évalue a puis b, et sa valeur est celle de b. Donc
dx=x2-x1,x1 assigne x2-x1 à dx et vaut x1.
On peut ré-écrire la ligne :
if(f<0.0)
{
dx = x2 - x1;
rtb = x1;
}
else
{
dx = x1 - x2;
rtb = x2;
}

Ce qui est à mon avis plus lisible, et pas moins efficace.

--
Julien

Avatar
Horst Kraemer
(Causse Bruno) wrote:

rtb = f < 0.0 ? ( dx=x2-x1,x1 ) : ( dx=x1-x2,x2 );


Cette ligne atroce équivaut à la ligne atroce

dx = f < 0.0 ? ( rtb=x1,x2-x1 ) : ( rtb=x2, x1-x2 );

ce qui équivaut à

if (f<0) {
dx = x2-x1;
rtb = x1;
}
else {
dx = x1-x2;
rtb = x2;
}


La valeur de l´expression

<exp1> , <exp2> , .... , <expn>

est <expn>. La virgule est "l'opérateur ," Sa valeur est le dernier
èlément de la liste et les autres expressions (ici une affectation) ne
sont évaluées que pour l'effet de bord de l'expression. Donc

a=b+c,d=e+f;

équivaut à

a=b+c;
d=e+f;

en ce qui concerne l'effet des affectations. Et

a = ( d=e+f , b+c )

ou

d = ( a=b+c , e+f )

serait une facon parfumée de produire le même effet.

--
Horst

--
Lâche pas la patate!

Avatar
no.bcausse.spam
Julien Lamy wrote:

Il s'agit de l'opérateur , (virgule), en général assez peu utilisé sauf
dans les boucles for.
L'expression a,b évalue a puis b, et sa valeur est celle de b. Donc
dx=x2-x1,x1 assigne x2-x1 à dx et vaut x1.
On peut ré-écrire la ligne :
if(f<0.0)
{
dx = x2 - x1;
rtb = x1;
}
else
{
dx = x1 - x2;
rtb = x2;
}

Ce qui est à mon avis plus lisible, et pas moins efficace.


merci
--
bruno Causse
http://perso.wanadoo.fr/othello