• [^] # Re: Bug !!

    Posté par . En réponse au journal [SSD] Mesure de la latence d'écriture aléatoire sur disque. Évalué à 2.

    Je vais encore m'auto-répondre.

    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.