-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.