racket/collects/tests/mzscheme/benchmarks/shootout/random.ss
2008-02-23 09:42:03 +00:00

38 lines
1012 B
Scheme

;;; http://shootout.alioth.debian.org/
;;; Random implementation, by Jens Axel Sogaard
;;;
;;; Modified for proper string output by Brent Fulgham
(module random mzscheme
(require (only mzlib/string real->decimal-string))
(define IM 139968)
(define IA 3877)
(define IC 29573)
(define gen_random
(let ((LAST 42))
(lambda (max)
(set! LAST (modulo (+ (* LAST IA) IC) IM))
(/ (* max LAST) IM))))
(define (roundto digits num)
(let* ([e (expt 10 digits)]
[num (round (* e (inexact->exact num)))])
(format "~a.~a"
(quotient num e)
(substring (string-append (number->string (remainder num e))
(make-string digits #\0))
0 digits))))
(let ((n (string->number
(vector-ref (current-command-line-arguments)
0))))
(let loop ((iter n))
(if (> iter 1)
(begin
(gen_random 100.0)
(loop (- iter 1)))))
(printf "~a~%"
(real->decimal-string (gen_random 100.0) 9))))