43 lines
847 B
Plaintext
43 lines
847 B
Plaintext
(scl 4)
|
|
(seed (in "/dev/urandom" (rd 8)))
|
|
|
|
(de fact (N)
|
|
(if (=0 N) 1 (apply * (range 1 N))) )
|
|
|
|
(de analytical (N)
|
|
(sum
|
|
'((I)
|
|
(/
|
|
(* (fact N) 1.0)
|
|
(** N I)
|
|
(fact (- N I)) ) )
|
|
(range 1 N) ) )
|
|
|
|
(de testing (N)
|
|
(let (C 0 N (dec N) X 0 B 0 I 1000000)
|
|
(do I
|
|
(zero B)
|
|
(one X)
|
|
(while (=0 (& B X))
|
|
(inc 'C)
|
|
(setq
|
|
B (| B X)
|
|
X (** 2 (rand 0 N)) ) ) )
|
|
(*/ C 1.0 I) ) )
|
|
|
|
(let F (2 8 8 6)
|
|
(tab F "N" "Avg" "Exp" "Diff")
|
|
(for I 20
|
|
(let (A (testing I) B (analytical I))
|
|
(tab F
|
|
I
|
|
(round A 4)
|
|
(round B 4)
|
|
(round
|
|
(*
|
|
(abs (- (*/ A 1.0 B) 1.0))
|
|
100 )
|
|
2 ) ) ) ) )
|
|
|
|
(bye)
|