;; Die ersten drei Zeilen dieser Datei wurden von DrRacket eingefügt. Sie enthalten Metadaten ;; über die Sprachebene dieser Datei in einer Form, die DrRacket verarbeiten kann. #reader(lib "DMdA-assignments-reader.ss" "deinprogramm")((modname monte-carlo-functional) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #t #t none explicit #f ()))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (: rand-update (natural -> natural)) (define rand-update (lambda (x) (modulo (+ (* 33 x) 7) 64))) (define rand-init 13) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Monte-Carlo-Simulation ohne veränderbaren Zustand: ; Berechne eine Näherung für pi (: estimate-pi (natural -> real)) (define estimate-pi (lambda (trials) (sqrt (/ 6 (random-gcd-test trials rand-init))))) ; Cesaro-Test wiederholt ausführen (: random-gcd-test (natural natural -> real)) (define random-gcd-test (lambda (trials init-x) (letrec ((iter (lambda (trials-remaining trials-success x) (letrec ((x1 (rand-update x)) (x2 (rand-update x1))) (cond ((= trials-remaining 0) (/ trials-success trials)) ((= (gcd x1 x2) 1) (iter (- trials-remaining 1) (+ trials-success 1) x2)) (else (iter (- trials-remaining 1) trials-success x2))))))) (iter trials 0 init-x))))