bignum


Vocabulary
math

Class description
The class of bignums, which are heap-allocated arbitrary-precision integers.

Definition
IN: math

BUILTIN: bignum ;


Methods
USING: bootstrap.image.private math ;

M: bignum '
[ bignum [ emit-bignum ] emit-object ] cache-eql-object ;


USING: kernel math math.bitwise.private ;

M: bignum (bit-count)
[ 0 ] [ [ byte-bit-count ] [ -8 shift (bit-count) ] bi + ]
if-zero ;


USING: bootstrap.image.private kernel kernel.private math ;

M: bignum (eql?) { bignum bignum } declare = ;


USING: math math.private ;

M: bignum (log2) bignum-log2 ; inline


USING: kernel math math.parser.private sbufs sequences ;

M: bignum (positive>dec)
12 <sbuf> (bignum>dec) (fixnum>dec) "" like reverse! nip ;
inline


USING: math random.private ;

M: bignum (random-integer) ((random-integer)) ;


USING: math math.private ;

M: bignum * bignum* ; inline


USING: math math.private ;

M: bignum + bignum+ ; inline


USING: math math.private ;

M: bignum - bignum- ; inline


USING: kernel.private math math.integers.private ;

M: bignum /f { bignum bignum } declare bignum/f ;


USING: math math.private ;

M: bignum /i bignum/i ; inline


USING: math math.private ;

M: bignum /mod bignum/mod ; inline


USING: math math.private ;

M: bignum < bignum< ; inline


USING: math math.private ;

M: bignum <= bignum<= ; inline


USING: math math.private ;

M: bignum > bignum> ; inline


USING: math math.private ;

M: bignum >= bignum>= ; inline


USING: arrays asn1 kernel math pack sequences ;

M: bignum >ber
>128-ber dup length dup 126 >
[ "range error in bignum" throw ]
[ 2 swap 2array "CC" pack-native B{ } prepend-as ] if ;


USING: math ;

M: bignum >bignum ; inline


USING: math math.private ;

M: bignum >fixnum bignum>fixnum ; inline


USING: math math.integers.private ;

M: bignum >float bignum>float ; inline


USING: kernel layouts math math.order ;

M: bignum >integer
dup most-negative-fixnum most-positive-fixnum between?
[ >fixnum ] when ;


USING: kernel math math.functions math.functions.private ;

M: bignum ^n [ factor-2s ] dip [ (^n) ] keep rot * shift ;


USING: math math.private ;

M: bignum bit? bignum-bit? ; inline


USING: math math.private ;

M: bignum bitand bignum-bitand ; inline


USING: math math.private ;

M: bignum bitnot bignum-bitnot ; inline


USING: math math.private ;

M: bignum bitor bignum-bitor ; inline


USING: math math.private ;

M: bignum bitxor bignum-bitxor ; inline


USING: compiler.tree.propagation.info kernel math ;

M: bignum eql? over bignum? [ = ] [ 2drop f ] if ;


USING: kernel math math.private ;

M: bignum equal?
over bignum?
[ bignum= ]
[ swap dup fixnum? [ >bignum bignum= ] [ 2drop f ] if ] if
; inline


USING: math math.functions math.private ;

M: bignum fast-gcd bignum-gcd ; inline


USING: kernel math math.private ;

M: bignum hashcode* nip bignum>fixnum ;


USING: math math.private ;

M: bignum integer>fixnum bignum>fixnum ; inline


USING: kernel math math.private ;

M: bignum integer>fixnum-strict
dup bignum>fixnum 2dup number=
[ nip ] [ drop out-of-fixnum-range ] if ; inline


USING: math math.functions math.functions.private ;

M: bignum log [ log ] log-2 (bignum-log) ;


USING: math math.functions math.functions.private ;

M: bignum log10 [ log10 ] log10-2 (bignum-log) ;


USING: math math.private ;

M: bignum mod bignum-mod ; inline


USING: math math.private ;

M: bignum number= bignum= ; inline


USING: kernel.private math math.order.private ;

M: bignum real<=> { bignum bignum } declare (real<=>) ; inline


USING: math math.private ;

M: bignum shift integer>fixnum bignum-shift ; inline


USING: math math.private ;

M: bignum u< bignum< ; inline


USING: math math.private ;

M: bignum u<= bignum<= ; inline


USING: math math.private ;

M: bignum u> bignum> ; inline


USING: math math.private ;

M: bignum u>= bignum>= ; inline