(* module de manipulation de nombres complexes *) type complexe = {re :float; im :float} ;; let unC = {re = 1.; im = 0.};; let zeroC = {re = 0.; im = 0.};; let iC = {re = 0.; im = 1.};; let jC = {re = -0.5; im = 0.866025403784};; let conjC a = {re = a.re;im = -.a.im};; let aC a b= {re = a.re+.b.re;im = a.im+.b.im};; let pC a b= {re = a.re*.b.re-.a.im*.b.im;im = b.re*.a.im+.a.re*.b.im};; let sC a b= {re = a.re-.b.re;im = a.im-.b.im};; let dC a b= let module_carre=b.re*.b.re+.b.im*.b.im in {re = (a.re*.b.re+.a.im*.b.im)/.module_carre; im = (b.re*.a.im-.a.re*.b.im)/.module_carre} ;; (* les détails du module sont d'une inutilité profonde, mais c'est l'usage de faire cela pour montrer qu'on sait le faire*) let modarg {re=x; im=y} = let modul = let ax=(abs_float x) and ay=(abs_float y) in if ax=0. then ay else if ay=0. then ax else if ax>ay then let q=ay/.ax in ax*.sqrt(1.+.q*.q) else let q=ax/.ay in ay*.sqrt(1.+.q*.q) in (modul,atan2 x y) ;; (* un exemple de calcul *) (* sC conjC(pC jC JC) jc;; *)