Pourquoi -freciprocal-math est-il dangereux dans GCC?

-freciprocal-math dans GCC modifie le code suivant

 double a = b / c; 

à

  double tmp = 1/c; double a = b * tmp; 

Dans le manuel GCC, il est dit qu’une telle optimisation est dangereuse et n’est pas conforme aux normes IEEE. Mais je ne peux pas penser à un exemple. Pourriez-vous donner un exemple à ce sujet?

    Diviser par 10 et multiplier par 0.1000000000000000055511151231257827021181583404541015625 ne sont pas la même chose.

    Je pense peut-être à un drapeau de compilateur différent, mais …

    Certains processeurs ont des instructions pour calculer l’inverse approximatif. RCPSS sur le x86 (instruction SIMD) vient à l’esprit; il a une erreur relative 1.5 2 ^ −12. L’utilisation de cet indicateur peut permettre au compilateur de sélectionner une instruction approximative réciproque, ce qui peut ne pas être une chose sûre à faire en fonction de votre application.

    J’espère que cela t’aides.