RosettaCodeData/Task/Polynomial-long-division/OCaml/polynomial-long-division-2.ocaml
Ingy döt Net b83f433714 tasks a-s
2013-04-10 23:57:08 -07:00

10 lines
345 B
Text

let polydiv f g =
let rec aux f s q =
let ddif = (deg f) - (deg s) in
if ddif < 0 then (q, f) else
let k = (List.hd f) /. (List.hd s) in
let ks = List.map (( *.) k) (shift ddif s) in
let q' = zip (+.) q (shift ddif [k])
and f' = norm (List.tl (zip (-.) f ks)) in
aux f' s q' in
aux (norm f) (norm g) []