On 10/28/07, Ivan Raikov <[EMAIL PROTECTED]> wrote:
>
> Hello,
>
>    Does the random-mtzig egg do what you need?

It looks better, because you just seed the state as you please and
then consistently pass the state. This means I can have one RNG that
uses the same seed across interpreter invocations and another that is
truly random.

I dont know why things like SRFI-27 get ratified and have the
inconsistency that Kon discusses in the "Issues" section of his docs:
http://www.call-with-current-continuation.org/eggs/srfi-27.html

With your mtzig library, I see how to create a uniformly distributed
real from (0,1)
but I do not see how to create a uniformly distributed integer from
[0,n) where n is some number not necessarily the largest on the
machine.

Also, i do not understand why you did not pass in the created state in
your example at the end:

csi> (require-extension random-mtzig)
csi> (random-mtzig:init! 24)
csi> (random-mtzig:f64vector-randu! 20)

The docs say that N * state (which I assume is a 2-tuple of an integer
and the previously created state) is passed to that function.

In fact, the docs are confusing because the type signatures imply that
the functions take a state, but then the example at the bottom does
not supply a state to random-mtzig:f64vector-randu!

Compare these signatures:
procedure: random-mtzig:init :: [SEED] -> STATE
procedure: random-mtzig:random! :: STATE -> INTEGER

In the first procedure SEED is an optional argument, in the second
STATE is not indicated as optional. It must be supplied.

> It can be seeded from
> /dev/urandom, or with a constant supplied by the user, and you could
> have multiple seed states that are passed to the random number
> generating routines in the egg. I can also add some convenience
> functions, if they would fit your needs better.

Based on your API, here is what I would be aiming for:

(define *fixed-seed* (expt 7 5))

(define fixed-state (random-mtzig:init *fixed-seed*))

(define (roll-fixed n)
   (if (zero? n)
        (random-mtzig:randu! fixed-state)
        (random-mtzig:random-from-zero-to-n n fixed-state)  ; [0,n)
    ))

(define random-state (random-mtzig:init)

(define (roll-random n)
   (if (zero? n)
        (random-mtzig:randu! random-state)
        (random-mtzig:random-from-zero-to-n n random-state)  ; [0,n)
    ))


_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to