Arithmétique des ordinateurs

Pour x très grand, le calcul de √(x + 1) − √x en virgule flottante subit une annulation catastrophique. Quelle réécriture permet d'obtenir un résultat précis ?

  1. ACalculer 1 ÷ (√(x + 1) + √x)
  2. BCalculer √(x + 1 − x)
  3. CConvertir √(x + 1) et √x en double précision puis soustraire avec la même expression
Afficher la réponse et l'explication

Réponse : A. Calculer 1 ÷ (√(x + 1) + √x)

√(x + 1) et √x étant presque égaux, leur soustraction directe annule les chiffres de tête. En multipliant numérateur et dénominateur par √(x + 1) + √x, on obtient (x + 1 − x) ÷ (√(x + 1) + √x) = 1 ÷ (√(x + 1) + √x), qui supprime la soustraction de nombres voisins et se calcule précisément. √(x + 1 − x) vaut 1 et constitue une expression fausse. La double précision améliore la situation, mais le même problème réapparaît pour x encore plus grand ; ce n'est pas un remède de fond.

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

Autres questions sur Arithmétique des ordinateurs

  1. En simple précision, ajouter 1 à cent millions (10⁸) laisse le résultat inchangé. Quelle explication de ce phénomène est correcte ?
  2. Quel est l'objectif de la sommation de Kahan (sommation compensée), utilisée pour additionner un grand nombre de flottants ?
  3. Quel est l'avantage du calcul de a × b + c par une instruction FMA (multiplication-addition fusionnée) ?
  4. Quelle est la principale raison de l'emploi de bfloat16 pour l'entraînement en IA ?
  5. Lors de l'entraînement d'un réseau de neurones en FP16 (demi-précision : 1 bit de signe, 5 d'exposant, 10 de mantisse), quel problème survient fréquemment et se traite en multipliant la perte par un facteur (loss scaling) ?