Je fais quelques calculs numériques, et j'ai souvent eu des problèmes avec les calculs à virgule flottante lors de l'utilisation de GCC. Pour mon but actuel, je ne me soucie pas trop de la vraie précision des résultats, mais je veux cette propriété ferme:Comportement constant du code flottant avec GCC
peu importe où le code SAME est dans mon programme, lorsqu'il est exécuté sur les entrées SAME , Je veux qu'il donne les mêmes résultats.
Comment puis-je forcer GCC à faire cela? Et plus précisément, quel est le comportement de --fast-math, et les différentes -O optimisations? J'ai entendu dire que GCC pourrait essayer d'être intelligent, et parfois charger des flottants dans les registres, et parfois les lire directement depuis la mémoire, et que cela pourrait changer la précision des flottants, résultant en une sortie différente. Comment puis-je éviter ça?
Encore une fois, je veux:
- mes calculs pour être rapide
- mes calculs fiables (c.-même entrée -> même résultat.)
- Je ne me soucie pas beaucoup au sujet de la précision pour ce code particulier, donc je peux être bien avec une précision réduite si cela apporte la fiabilité
quelqu'un pourrait-il me dire quelle est la voie à suivre pour ce problème?
De plus, les choses qui vous dérangeront sont exactement ce qui dérange les gens qui essaient d'écrire correctement des analyseurs pour C, vous devriez donc être intéressé par ce rapport: http://hal.archives-ouvertes.fr/hal- 00128124/fr /. Sauf que les auteurs des analyseurs n'ont pas le contrôle des options de compilation, mais ils travaillent dans un cadre où il suffit de prendre en compte toutes les possibilités sans en oublier aucune. –