 
 : uniform-random-float ( min max -- n )
     random-generator get (uniform-random-float) ; inline
+
+M: float random [ f ] [ 0.0 swap uniform-random-float ] if-zero ;
 
 : random-unit ( -- n )
     0.0 1.0 uniform-random-float ; inline

! Copyright (C) 2008 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien.c-types alien.data arrays assocs
byte-arrays byte-vectors combinators combinators.short-circuit
fry hashtables hashtables.private hints io.backend io.binary
kernel locals math math.bitwise math.constants math.functions
math.order math.ranges namespaces sequences sequences.private
sets summary system typed vocabs ;
IN: random

SYMBOL: system-random-generator


M: object random-bytes* ( n tuple -- byte-array )
    [ [ <byte-vector> ] keep 4 /mod ] dip
    [ pick '[ _ random-32* c:int <ref> _ push-all ] times ]
    [
        over zero?
        [ 2drop ] [ random-32* c:int <ref> swap head append! ] if
    ] bi-curry bi* B{ } like ;

HINTS: M\ object random-bytes* { fixnum object } ;
