Je ne pense pas que get_rand_uniform()
fasse ce que vous pensez. Cela ressemble probablement à ceci:
float get_rand_uniform(void);
Ou peut-être double
. Le point est, il renvoie une décimale aléatoire nombre entre 0 et 1. Donc ceci:
get_rand_uniform() > 0.5
un chèque pour voir si ce nombre est plus proche de 1 ou 0. Et ceci:
x ? y : z
est l'opérateur conditionnel ternaire, qui sert la même fonction que celle-ci:
if(x) { y } else { z }
Sauf que l'opéra ternaire tor est une expression . Donc tout cela:
get_rand_uniform() > 0.5 ? 1 : 0
est arrondi essentiellement le nombre de virgule flottante aléatoire à 1 ou 0, et ceci:
b = get_rand_uniform() > 0.5 ? 1 : 0;
Affecte que 1 ou choisis au hasard 0-b
. Je crois que les parenthèses ne sont pas nécessaires ici, mais si vous les aimez, allez-y.
merci pour la réponse! Cela a éclairci les choses pour moi. –
Ce n'est pas un raccourci, et ce n'est pas exactement équivalent - c'est en fait une construction distincte. Cela peut être facilement vu en utilisant des expressions ternaires imbriquées, et en regardant dans quel ordre elles sont évaluées, de gauche à droite ou vice versa. Bien sûr, certains pourraient dire que se comporter d'une autre manière que celle d'un 'équivalent' si/autre contstruct doit être un bug. –
Merci pour votre contribution; J'ai quelque peu qualifié ma réponse. –