[Shootout-list] Tcl : random

Robert Seeger Robert Seeger <rhseeger@gmail.com>
Wed, 16 Mar 2005 17:20:21 -0500


The code pasted below provides for a minor speed improvement over that
currently listed for Tcl on the random test.

Robert Seeger

# ==============================
set IM 139968
set IA   3877
set IC  29573

set last 42

proc make_gen_random {} {
    global IM IA IC
    set params [list IM $IM IA $IA IC $IC]
    set body [string map $params {
        expr {($max * [set ::last [expr {($::last * IA + IC) % IM}]]) / IM}
    }]
    proc gen_random {max} $body
}

proc main {N} {
    incr N -1

    make_gen_random

    while {$N} {
        gen_random 100.0
        incr N -1
    }

    puts [format "%.9f" [gen_random 100.0]]
}

main [lindex $argv 0]