math.functions: faster (integer) m^n.

db4
John Benediktsson 2012-08-31 15:10:48 -07:00
parent 4a9688079a
commit 3836d57321
1 changed files with 16 additions and 3 deletions

View File

@ -25,12 +25,25 @@ M: real sqrt
<PRIVATE <PRIVATE
GENERIC# ^n 1 ( z w -- z^w ) foldable : (^fixnum) ( z w -- z^w )
[ 1 ] 2dip
[ dup zero? ] [
dup odd? [
[ [ * ] keep ] [ 1 - ] bi*
] when [ sq ] [ 2/ ] bi*
] until 2drop ; inline
: (^n) ( z w -- z^w ) : (^bignum) ( z w -- z^w )
make-bits 1 [ [ over * ] when [ sq ] dip ] reduce nip ; inline make-bits 1 [ [ over * ] when [ sq ] dip ] reduce nip ; inline
M: integer ^n : (^n) ( z w -- z^w )
dup fixnum? [ (^fixnum) ] [ (^bignum) ] if ; inline
GENERIC# ^n 1 ( z w -- z^w ) foldable
M: fixnum ^n (^n) ;
M: bignum ^n
[ factor-2s ] dip [ (^n) ] keep rot * shift ; [ factor-2s ] dip [ (^n) ] keep rot * shift ;
M: ratio ^n M: ratio ^n