#!/usr/local/bin/tclsh
# $Id: random.tcl,v 1.7 2001/05/08 01:36:50 doug Exp $
# http://www.bagley.org/~doug/shootout/
# from Miguel Sofer
trace variable params w make_main
proc make_main {args} {
global params last
set randBody [string map $params {
expr {(100.0 * [set last [expr {($last * IA + IC) % IM}]]) / IM}
}]
set mainBody [string map [list randBody $randBody] {
global argv last
set N [lindex $argv 0]
set result 0.0
while {$N} {
set result [randBody]
incr N -1
}
puts [format "%.9f" $result]
}]
proc main {} $mainBody
}
set params {IM 139968 IA 3877 IC 29573}
set last 42
main