How to sum a list of float numbers in OCaml

ocaml

Solution

let sum l=
match l with
[]->0.0
|h::t-> h+. (sum t);;

Since you didn't use the `rec` keyword here, the call to `sum` in the last line is a call to a `sum` function that you defined beforehand. Apparently that `sum` function was buggy.

Problem

I am puzzled with my code: ``` let sum l = match l with | [] -> 0.0 | h::t -> h +. (sum t);; ``` It should give me the sum of the numbers in the list. However when I check the code, I found the second code crashes when I use a list of length greater than or equal to 7. Here is the code: ``` # sum [0.;1.;2.;3.;4.;5.;] - : float = 15. # sum [0.;1.;2.;3.;4.;5.;6.] - : float = 21. # sum [0.;1.;2.;3.;4.;5.;6.;7.] - : float = 21. ``` I am really confused because a modification of it, which operates on int, turned out to be normal: ``` let rec sumf l = match l with | []-> 0.0 | h::t-> (float_of_int h) +. sumf t;; ``` and I do not know what is the essential difference between the two aside from I cast int into float in the second code.

Original source