D'après mon explication ci-dessus, dans le premier cas _r devrait valoir 3.0, car _a / _val est (int) / (double) donc je m'attendais à (int) / (int) or le cast de 1.5 en int donne 1, donc 3 / 1 = 3 puis cast vers double 3.0.
Avec le gcc ici 3.3.1 il me donne 2.0 aussi.
J'ai cherché dans la norme C, et rien trouvé d'intéressant. Il semble y avoir un flou dans le cas des opérateurs utilisés avec deux types différents. Cela dépend-il du compilateur ? Est-ce un cas indéterminé ? gcc semble utiliser le type le plus précis. Quelqu'un a t'il la possibilité de tester avec un gcc 2.95 ?
[^] # Re: Bug !!
Posté par Anthony Jaguenaud . En réponse au journal [SSD] Mesure de la latence d'écriture aléatoire sur disque. Évalué à 2.
Pour tester j'ai écris ce programme.
#include <stdio.h>
int main(void)
{
int _a;
double _r, _val, d_a;
_a = 3;
d_a = 3.0;
_val = 1.5;
_r = _a / _val;
printf("_r = %2.5f (int) / (double)\n",_r);
_r = d_a / _val;
printf("_r = %2.5f (double) / (double)\n",_r);
return 0;
}
D'après mon explication ci-dessus, dans le premier cas _r devrait valoir 3.0, car _a / _val est (int) / (double) donc je m'attendais à (int) / (int) or le cast de 1.5 en int donne 1, donc 3 / 1 = 3 puis cast vers double 3.0.
Avec le gcc ici 3.3.1 il me donne 2.0 aussi.
J'ai cherché dans la norme C, et rien trouvé d'intéressant. Il semble y avoir un flou dans le cas des opérateurs utilisés avec deux types différents. Cela dépend-il du compilateur ? Est-ce un cas indéterminé ? gcc semble utiliser le type le plus précis. Quelqu'un a t'il la possibilité de tester avec un gcc 2.95 ?
Si quelqu'un a une réponse, je suis preneur.