OCaml (option informatique) · Chapitre 1 · Exercice de TD
Puissance entière et dépassement
Découvrir OCaml : expressions, valeurs et types · niveau 3 (difficile)
Énoncé
Écrire une fonction récursive puissance x n calculant pour entier (sans l'opérateur **, réservé aux flottants). Expliquer ce qu'on observe pour de grandes valeurs, et le lien avec l'atelier en ligne.
Corrigé
let rec puissance x n =
if n = 0 then 1
else x * puissance x (n - 1)
Le cas de base renvoie 1 (convention ) ; chaque appel décrémente n, donc le calcul s'arrête. Pour de grandes valeurs (p. ex. puissance 2 64), le résultat déborde la capacité du type int et l'on obtient une valeur erronée (souvent négative) : c'est le dépassement de capacité. Dans l'atelier du navigateur, où int est sur 32 bits, ce débordement survient bien plus tôt (dès puissance 2 31 environ) que sur un OCaml natif 63 bits.
Exercices semblables
- Application partielle corrigé
- Fonction d'ordre supérieur et polymorphisme corrigé
- Manipuler des n-uplets corrigé
- L'algorithme d'Euclide corrigé
- Suite définie par récurrence mutuelle corrigé