38 lines
1012 B
Scheme
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))))
|