(* Calcul prin aproximări succesive pentru rădăcina pătrată a lui x Metoda babiloniană (sau a lui Heron): a_0 = 1, a_{n+1} = (a_n + x/a_n) / 2 *) (* Aici, condiția de oprire nu e dată de un număr fix de iterații (n) * ci de momentul în care am ajuns la o aproximare acceptabilă *) (* Exprimăm problema: calculează radical din x, *fiind dată* aproximarea a_n, * care devine parametru pentru funcția auxiliară approx * Ne oprim când două aproximări succesive sunt suficient de apropiate, * diferența în valoare absolută e mai mică decât precizia dorită, 10^-6 *) let mysqrt x = let rec approx a_n = (* folosește argumentul x al lui mysqrt *) let a_nxt = (a_n +. x /. a_n) /. 2. in (* noua aproximație *) if abs_float (a_nxt -. a_n) < 1e-6 then a_nxt else approx a_nxt in approx 1. (* apelul inițial: cu prima aproximație = 1 *) let test2 = mysqrt 2. let test3 = mysqrt 3. let test4 = mysqrt 4.
This document was generated using caml2html