0 people like it.
Like the snippet!
Pi - Using Nilakantha's accelerated series
Calculate the value of Pi, using the Nilakantha series
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
let nPi =
let piSeq = seq{
yield 3.0
let rec pi start sign = seq{
yield (sign * 4.0) / ( start * (start + 1.0) * (start + 2.0))
yield! pi (start + 2.0) (sign * -1.0)
}
yield! pi 2.0 1.0
}
piSeq |> Seq.take 10 |> Seq.sum
// using unfold
let p' =
let calc start sign = (sign * 4.0) / ( start * (start + 1.0) * (start + 2.0))
Seq.unfold (fun (start, sign) -> Some ( (calc start sign), (start + 2.0, sign * -1.0) )) (2.0, 1.0)
|> Seq.take 10
|> Seq.sum
|> (+) 3.0
|
val nPi : float
Full name: Script.nPi
val piSeq : seq<float>
Multiple items
val seq : sequence:seq<'T> -> seq<'T>
Full name: Microsoft.FSharp.Core.Operators.seq
--------------------
type seq<'T> = System.Collections.Generic.IEnumerable<'T>
Full name: Microsoft.FSharp.Collections.seq<_>
val pi : (float -> float -> seq<float>)
val start : float
val sign : float
module Seq
from Microsoft.FSharp.Collections
val take : count:int -> source:seq<'T> -> seq<'T>
Full name: Microsoft.FSharp.Collections.Seq.take
val sum : source:seq<'T> -> 'T (requires member ( + ) and member get_Zero)
Full name: Microsoft.FSharp.Collections.Seq.sum
val p' : float
Full name: Script.p'
val calc : (float -> float -> float)
val unfold : generator:('State -> ('T * 'State) option) -> state:'State -> seq<'T>
Full name: Microsoft.FSharp.Collections.Seq.unfold
union case Option.Some: Value: 'T -> Option<'T>
More information