Skip to content

Commit

Permalink
random: performance improvements to random-integer and random-bits.
Browse files Browse the repository at this point in the history
  • Loading branch information
mrjbq7 committed Feb 27, 2013
1 parent d66fdbb commit fd1d451
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions basis/random/random.factor
Expand Up @@ -46,21 +46,24 @@ TYPED: random-bytes ( n: fixnum -- byte-array: byte-array )

<PRIVATE

:: ((random-integer)) ( bits obj -- n required-bits )
: #bits ( n -- bits )
dup 2 <= [ drop 1 ] [ 1 - log2 1 + ] if ; inline

:: (random-bits) ( n bits obj -- n' )
obj random-32* 32 bits 32 - [ dup 0 > ] [
[ 32 shift obj random-32* + ] [ 32 + ] [ 32 - ] tri*
] while drop ;
] while drop [ n * ] [ 2^ /i ] bi* ; inline

: (random-integer) ( n obj -- n' )
[ dup next-power-of-2 log2 ] dip ((random-integer))
[ * ] [ 2^ /i ] bi* ;
[ dup #bits ] dip (random-bits) ;

: random-integer ( n -- n' )
random-generator get (random-integer) ;

PRIVATE>

: random-bits ( numbits -- r ) 2^ random-integer ;
: random-bits ( numbits -- r )
[ 2^ ] keep random-generator get (random-bits) ;

: random-bits* ( numbits -- n )
1 - [ random-bits ] keep set-bit ;
Expand Down

0 comments on commit fd1d451

Please sign in to comment.