Les Nombres Flottants

0.1 + 0.2 = 0.3 ? En maths, oui. En Python... pas exactement ! Les nombres a virgule (flottants) sont APPROXIMATIFS. Cette imprecision peut causer des bugs subtils si on ne la comprend pas. Decouvrez pourquoi et comment l'eviter !

50 min Niveau 3/5 +40 XP

Objectifs

  • Comprendre la notation scientifique et IEEE 754
  • Identifier les problemes de precision des flottants
  • Eviter les comparaisons directes de flottants
  • Connaitre les valeurs speciales (inf, NaN)

ATTENTION : Pieges frequents

  • !Comparer des flottants avec == (a != b)
  • !Croire que 0.1 + 0.2 == 0.3
  • !Ignorer les erreurs d'arrondi dans les boucles
  • !Utiliser des flottants pour de l'argent (utiliser Decimal)

Cours complet

Les flottants sont stockes comme en notation scientifique : un signe, une mantisse, et un exposant. C'est le standard IEEE 754.

# Notation scientifique : M x 10^E
# 12345 = 1.2345 x 10^4
# 0.0056 = 5.6 x 10^-3

# En Python, notation avec 'e'
print(1.5e3)      # 1500.0 (1.5 x 10^3)
print(2.5e-2)     # 0.025 (2.5 x 10^-2)
print(6.022e23)   # Nombre d'Avogadro

# Le standard IEEE 754 (binaire)
# Stocke : signe (1 bit) + exposant + mantisse
# - Simple precision (32 bits) : 7 chiffres significatifs
# - Double precision (64 bits) : 15-16 chiffres significatifs

# Python utilise la double precision (64 bits)
import sys
print(sys.float_info)

# Precision maximale
print(sys.float_info.dig)       # 15 chiffres significatifs
print(sys.float_info.max)       # ~1.8 x 10^308 (max)
print(sys.float_info.min)       # ~2.2 x 10^-308 (min positif)

# La mantisse binaire
# En binaire : 1.xxxxx x 2^E
# Exemple : 5.75 = 101.11 = 1.0111 x 2^2

Quiz Flottants

5 questions pour valider

Le bug celebre

>>> 0.1 + 0.2

0.30000000000000004

>>> 0.1 + 0.2 == 0.3

False

Solution

import math

math.isclose(0.1+0.2, 0.3)

# True !

EdTech AI Assistant