1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
let epsilon = 1e-7
let pi = 3.141592654

let sin (x:float) = 
    let rec series sum f d v k2 =
        let next = f * d / float v
        if abs(next) < epsilon then
            sum + next
        else
            series (sum + next) (-f) (d * x * x) (v  * (k2 + 1) * (k2 + 2)) (k2 + 2)
    series 0.0 1.0 1.0 1 1

let rec sin' x =
    if abs(x) < epsilon then
        x
    else
        let s = sin' (x / 3.0)
        3.0 * s - 4.0 * s * s * s;;

val epsilon : float = 1e-07
val pi : float = 3.141592654
val sin : float -> float
val sin' : float -> float

> sin 1.0;;
val it : float = 0.8414709846
> sin' 1.0;;
val it : float = 0.8414709848