math.functions: faster (integer) m^n.
parent
4a9688079a
commit
3836d57321
|
@ -25,12 +25,25 @@ M: real sqrt
|
|||
|
||||
<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
|
||||
|
||||
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 ;
|
||||
|
||||
M: ratio ^n
|
||||
|
|
Loading…
Reference in New Issue