math domain error
Python
Erreur courante
Explication
L'erreur `ValueError: math domain error` survient quand vous appelez une fonction du module `math` avec une valeur **hors de son domaine de définition** : racine carrée d'un nombre négatif, logarithme de zéro ou d'un négatif, `acos`/`asin` hors de l'intervalle `[-1, 1]`.
```python
import math
math.sqrt(-4) # pas de racine carrée réelle d'un négatif
# ValueError: math domain error
```
Causes courantes
- **`math.sqrt(x)`** avec `x < 0`. - **`math.log(x)`** avec `x <= 0`. - **`math.acos(x)` / `math.asin(x)`** avec `x` hors de `[-1, 1]`. - **Une valeur calculée** qui devient négative à cause d'arrondis ou de données.
1. Validez la valeur avant le calcul
import math
if x >= 0:
r = math.sqrt(x)
else:
r = None # ou traiter le cas négatif
2. Utilisez cmath pour des résultats complexes
import cmath
print(cmath.sqrt(-4)) # 2j (nombre complexe)
3. Bornez les valeurs sensibles aux arrondis
Pour acos/asin, un calcul peut donner 1.0000001 : ramenez-le dans l'intervalle :
import math
x = max(-1.0, min(1.0, x)) # clamp dans [-1, 1]
angle = math.acos(x)
Comment prevenir cette erreur
- **Vérifiez le domaine** avant tout `sqrt`, `log`, `acos`, `asin`.
- **Utilisez `cmath`** si des résultats complexes sont attendus.
- **Encadrez** les calculs issus de données externes par une validation.
- Référence : [docs.python.org — math](https://docs.python.org/fr/3/library/math.html).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Comment calculer la racine carrée d'un nombre négatif ?
`math` ne gère que les réels et lève l'erreur. Utilisez `cmath.sqrt(-4)` qui renvoie un nombre complexe (`2j`), ou validez en amont si vous n'attendez que des réels.
J'ai `acos(1.0000000001)` qui plante, pourquoi ?
Un arrondi a poussé la valeur juste au-dessus de 1, hors du domaine `[-1, 1]`. Ramenez-la dans l'intervalle avant l'appel : `x = max(-1.0, min(1.0, x))`.