Compilateurs

Pourquoi un compilateur, sous réglage strict, ne réordonne-t-il pas de lui-même l'addition en virgule flottante (a + b) + c en a + (b + c) ?

  1. AParce qu'à cause des erreurs d'arrondi l'associativité n'est pas vérifiée et le résultat peut changer
  2. BParce que le réordonnancement augmente le nombre d'additions
  3. CParce que l'ordre des additions en virgule flottante est fixé automatiquement par le matériel
Afficher la réponse et l'explication

Réponse : A. Parce qu'à cause des erreurs d'arrondi l'associativité n'est pas vérifiée et le résultat peut changer

En virgule flottante, chaque addition arrondit le résultat au nombre de chiffres représentable ; changer l'ordre des calculs peut donc modifier légèrement le résultat. Par exemple, additionner d'abord un très grand nombre et un petit fait disparaître le petit par arrondi, alors qu'additionner d'abord les petits entre eux peut le préserver. Un compilateur en réglage strict conserve donc l'ordre. Si l'on choisit un réglage tolérant ces différences (mathématiques rapides, etc.), il peut réordonner pour vectoriser. Le nombre d'additions ne change pas.

S'entraîner sur ce thème Retour au thème

Autres questions sur Compilateurs

  1. Quel type d'instructions la vectorisation automatique du compilateur utilise-t-elle ?
  2. Quelle condition fondamentale les optimisations du compilateur doivent-elles respecter ?
  3. Quelle définition de la sélection d'instructions, l'une des étapes de la génération de code, est correcte ?
  4. Quelle définition du compilateur croisé est correcte ?
  5. Lorsqu'on examine au débogueur un programme compilé avec optimisation, certaines variables apparaissent parfois comme « non affichables ». Quelle en est la principale raison ?

Comparatifs sur ce thème