;; 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-carle) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #t #t none explicit #f ()))) ; Zufallszahlengenerator (sehr einfach!) (define rand-init 13) (define rand-update (lambda (x) (modulo (+ (* 33 x) 7) 1023))) ; Generiere nächste Zufallszahl #;(define rand (letrec ((x rand-init)) (lambda () (begin (set! x (rand-update x)) x)))) (define rand (lambda () (random 10000))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Monte-Carlo-Methode: Parameter: Zahl der Experimente und ; Experiment (erfolgreich oder nicht) (: monte-carlo (natural (-> boolean) -> real)) (define monte-carlo (lambda (trials experiment) (letrec ((iter (lambda (trials-remaining trials-success) (cond ((= trials-remaining 0) (/ trials-success trials)) ((experiment) (iter (- trials-remaining 1) (+ trials-success 1))) (else (iter (- trials-remaining 1) trials-success)))))) (iter trials 0)))) ; Cesaro-Test: sind zwei Zufallszahlen teilerfremd? (: cesaro-test (-> boolean)) (define cesaro-test (lambda () (= (gcd (rand) (rand)) 1))) ; Näherungslösung für pi durch Monte-Carlo mit Cesaro-Test (: estimate-pi (natural -> real)) (define estimate-pi (lambda (trials) (sqrt (/ 6 (monte-carlo trials cesaro-test)))))