Adloun

OCaml (option informatique) · Chapitre 10 · Exercice de TD

Racine carrée entière par dichotomie

Recherche et dichotomie · niveau 3 (difficile)

Énoncé

Écrire racine n (), le plus grand tel que , en par dichotomie (à comparer au du chapitre 4).

Corrigé

let racine n =
  let g = ref 0 and d = ref n in
  while !g < !d do
    let m = (!g + !d + 1) / 2 in   (* milieu « par excès » *)
    if m * m <= n then g := m
    else d := m - 1
  done;
  !g

On cherche le plus grand m avec m*m <= n. Invariant : !g * !g <= n (g est réalisable) et la réponse est dans [g, d]. Le milieu par excès (+1) est nécessaire : avec g := m et un milieu par défaut, on bouclerait sans fin quand d = g + 1. Variant : d - g. Coût . racine 10 .

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre