Sys.command "ocaml -version";; print_endline Sys.ocaml_version;; let print f = let r = Printf.printf f in flush_all(); r ;; let premiercalcul (rho : float) (n : int) = let somme = ref 0. in let unmoinsunsurrho = 1. -. (1. /. rho) in let terme = ref 1. in for _ = 0 to n do (* terme = (1-1/rho)^j pour j = _ *) somme := !somme +. !terme; (* somme = sum_k=0^j terme_k *) terme := !terme *. unmoinsunsurrho; (* conserve l'invariant de boucle *) done; !somme ;; let rho = 2. ** 20.;; 1. -. 1. /. rho;; for n = 0 to 10 do print "\nS_%i \t= %g" n (premiercalcul rho n); done; for n = 1000 to 1010 do print "\nS_%i \t= %g" n (premiercalcul rho n); done; let deuxiemecalcul (rho : float) (k : int) (n : int) = let somme = ref 0. in let unmoinsunsurrho = 1. -. (1. /. rho) in let terme = ref 1. in for _ = 0 to n do for _ = 0 to k-1 do somme := !somme +. !terme; terme := !terme *. unmoinsunsurrho; done; terme := !terme *. unmoinsunsurrho; done; !somme ;; let valeurs_k = [|1; 10; 100; 1000; 10000|] in for i = 0 to (Array.length valeurs_k) - 1 do let k = valeurs_k.(i) in print "\n\nFor K = %i ..." k; for n = 0 to 10 do print "\nS_%i \t= %g" n (deuxiemecalcul rho k n); done; done; let valeurs_n = [|100; 1000; 10000; 100000|] in let valeurs_k = [|1; 10; 100; 1000; 10000|] in for i = 0 to (Array.length valeurs_k) - 1 do let k = valeurs_k.(i) in print "\n\nFor K = %i ..." k; for j = 0 to (Array.length valeurs_n) - 1 do let n = valeurs_n.(j) in print "\nS_%i \t= %g" n (deuxiemecalcul rho k n); done; done;