bx 88 src/bignum.c static ScmBignum *bignum_rshift(ScmBignum *br, ScmBignum *bx, int amount); bx 89 src/bignum.c static ScmBignum *bignum_lshift(ScmBignum *br, ScmBignum *bx, int amount); bx 91 src/bignum.c static ScmBignum *bignum_add_int(ScmBignum *br, ScmBignum *bx, ScmBignum *by); bx 437 src/bignum.c int Scm_BignumCmp(ScmBignum *bx, ScmBignum *by) bx 441 src/bignum.c if (bx->sign < by->sign) return -1; bx 442 src/bignum.c if (bx->sign > by->sign) return 1; bx 443 src/bignum.c if (bx->size < by->size) return (bx->sign > 0) ? -1 : 1; bx 444 src/bignum.c if (bx->size > by->size) return (bx->sign > 0) ? 1 : -1; bx 446 src/bignum.c for (i=bx->size-1; i>=0; i--) { bx 447 src/bignum.c if (bx->values[i] < by->values[i]) return (bx->sign > 0) ? -1 : 1; bx 448 src/bignum.c if (bx->values[i] > by->values[i]) return (bx->sign > 0) ? 1 : -1; bx 454 src/bignum.c int Scm_BignumAbsCmp(ScmBignum *bx, ScmBignum *by) bx 458 src/bignum.c if (bx->size < by->size) return -1; bx 459 src/bignum.c if (bx->size > by->size) return 1; bx 460 src/bignum.c for (i=bx->size-1; i>=0; i--) { bx 461 src/bignum.c if (bx->values[i] < by->values[i]) return -1; bx 462 src/bignum.c if (bx->values[i] > by->values[i]) return 1; bx 474 src/bignum.c int Scm_BignumCmp3U(ScmBignum *bx, ScmBignum *off, ScmBignum *by) bx 476 src/bignum.c int xsize = SCM_BIGNUM_SIZE(bx), ysize = SCM_BIGNUM_SIZE(by); bx 494 src/bignum.c if (bx->values[xsize-1] > by->values[ysize-1]) return 1; bx 496 src/bignum.c if (bx->values[xsize-1] < by->values[ysize-1]-1) return -1; bx 499 src/bignum.c u_long xx = bx->values[xsize-1], oo = off->values[osize-1]; bx 506 src/bignum.c tsize = bignum_safe_size_for_add(bx, off); bx 508 src/bignum.c bignum_add_int(br, bx, off); bx 552 src/bignum.c ScmObj Scm_BignumComplement(ScmBignum *bx) bx 554 src/bignum.c ScmBignum *r = SCM_BIGNUM(Scm_BignumCopy(bx)); bx 560 src/bignum.c static ScmBignum *bignum_add_int(ScmBignum *br, ScmBignum *bx, ScmBignum *by) bx 563 src/bignum.c int xsize = SCM_BIGNUM_SIZE(bx); bx 579 src/bignum.c x = bx->values[i]; bx 583 src/bignum.c x = bx->values[i]; bx 592 src/bignum.c static ScmBignum *bignum_sub_int(ScmBignum *br, ScmBignum *bx, ScmBignum *by) bx 595 src/bignum.c int xsize = SCM_BIGNUM_SIZE(bx); bx 611 src/bignum.c x = bx->values[i]; bx 615 src/bignum.c x = bx->values[i]; bx 627 src/bignum.c static ScmBignum *bignum_add(ScmBignum *bx, ScmBignum *by) bx 629 src/bignum.c int rsize = bignum_safe_size_for_add(bx, by); bx 631 src/bignum.c br->sign = SCM_BIGNUM_SIGN(bx); bx 632 src/bignum.c if (SCM_BIGNUM_SIGN(bx) == SCM_BIGNUM_SIGN(by)) { bx 633 src/bignum.c bignum_add_int(br, bx, by); bx 635 src/bignum.c bignum_sub_int(br, bx, by); bx 641 src/bignum.c static ScmBignum *bignum_sub(ScmBignum *bx, ScmBignum *by) bx 643 src/bignum.c int rsize = bignum_safe_size_for_add(bx, by); bx 645 src/bignum.c br->sign = SCM_BIGNUM_SIGN(bx); bx 646 src/bignum.c if (SCM_BIGNUM_SIGN(bx) == SCM_BIGNUM_SIGN(by)) { bx 647 src/bignum.c bignum_sub_int(br, bx, by); bx 649 src/bignum.c bignum_add_int(br, bx, by); bx 655 src/bignum.c static ScmBignum *bignum_add_si(ScmBignum *bx, long y) bx 658 src/bignum.c int i, rsize = bx->size+1; bx 663 src/bignum.c if (y == 0) return bx; bx 666 src/bignum.c br->sign = bx->sign; bx 667 src/bignum.c if (SCM_BIGNUM_SIGN(bx) == ysign) { bx 668 src/bignum.c for (c=0, i=0; i<bx->size; i++) { bx 669 src/bignum.c UADD(br->values[i], c, bx->values[i], yabs); bx 673 src/bignum.c for (c=0, i=0; i<bx->size; i++) { bx 674 src/bignum.c USUB(br->values[i], c, bx->values[i], yabs); bx 682 src/bignum.c ScmObj Scm_BignumAdd(ScmBignum *bx, ScmBignum *by) bx 684 src/bignum.c return Scm_NormalizeBignum(bignum_add(bx, by)); bx 687 src/bignum.c ScmObj Scm_BignumSub(ScmBignum *bx, ScmBignum *by) bx 689 src/bignum.c return Scm_NormalizeBignum(bignum_sub(bx, by)); bx 692 src/bignum.c ScmObj Scm_BignumAddSI(ScmBignum *bx, long y) bx 694 src/bignum.c return Scm_NormalizeBignum(bignum_add_si(bx, y)); bx 697 src/bignum.c ScmObj Scm_BignumSubSI(ScmBignum *bx, long y) bx 699 src/bignum.c return Scm_NormalizeBignum(bignum_add_si(bx, -y)); bx 702 src/bignum.c ScmObj Scm_BignumAddN(ScmBignum *bx, ScmObj args) bx 704 src/bignum.c ScmBignum *r = bx; bx 725 src/bignum.c ScmObj Scm_BignumSubN(ScmBignum *bx, ScmObj args) bx 727 src/bignum.c ScmBignum *r = bx; bx 753 src/bignum.c static ScmBignum *bignum_rshift(ScmBignum *br, ScmBignum *bx, int amount) bx 759 src/bignum.c if (bx->size <= nwords) { bx 762 src/bignum.c for (i = nwords; i < bx->size; i++) { bx 763 src/bignum.c br->values[i-nwords] = bx->values[i]; bx 765 src/bignum.c br->size = bx->size - nwords; bx 766 src/bignum.c br->sign = bx->sign; bx 769 src/bignum.c for (i = nwords; i < bx->size-1; i++) { bx 770 src/bignum.c x = (bx->values[i+1]<<(WORD_BITS-nbits))|(bx->values[i]>>nbits); bx 773 src/bignum.c br->values[i-nwords] = bx->values[i]>>nbits; bx 774 src/bignum.c br->size = bx->size - nwords; bx 775 src/bignum.c br->sign = bx->sign; bx 782 src/bignum.c static ScmBignum *bignum_lshift(ScmBignum *br, ScmBignum *bx, int amount) bx 791 src/bignum.c for (i = bx->size-1; i>=0; i--) { bx 792 src/bignum.c if (br->size > i+nwords) br->values[i+nwords] = bx->values[i]; bx 796 src/bignum.c if (br->size > bx->size + nwords) { bx 797 src/bignum.c br->values[bx->size+nwords] = bx 798 src/bignum.c bx->values[bx->size-1]>>(WORD_BITS-nbits); bx 800 src/bignum.c for (i = bx->size-1; i > 0; i--) { bx 801 src/bignum.c x = (bx->values[i]<<nbits)|(bx->values[i-1]>>(WORD_BITS-nbits)); bx 804 src/bignum.c br->values[nwords] = bx->values[0]<<nbits; bx 807 src/bignum.c if (br != bx) { bx 808 src/bignum.c br->sign = bx->sign; bx 818 src/bignum.c static ScmBignum *bignum_mul_word(ScmBignum *br, ScmBignum *bx, bx 824 src/bignum.c for (i=0; i<bx->size; i++) { bx 825 src/bignum.c x = bx->values[i]; bx 847 src/bignum.c static ScmBignum *bignum_mul(ScmBignum *bx, ScmBignum *by) bx 850 src/bignum.c ScmBignum *br = make_bignum(bx->size + by->size); bx 852 src/bignum.c bignum_mul_word(br, bx, by->values[i], i); bx 854 src/bignum.c br->sign = bx->sign * by->sign; bx 858 src/bignum.c static ScmBignum *bignum_mul_si(ScmBignum *bx, long y) bx 863 src/bignum.c if (y == 1) return bx; bx 871 src/bignum.c br = SCM_BIGNUM(Scm_BignumCopy(bx)); bx 876 src/bignum.c br = make_bignum(bx->size + 1); /* TODO: more accurate estimation */ bx 878 src/bignum.c br->sign = bx->sign; bx 879 src/bignum.c bignum_mul_word(br, bx, yabs, 0); bx 884 src/bignum.c ScmObj Scm_BignumMul(ScmBignum *bx, ScmBignum *by) bx 886 src/bignum.c ScmBignum *br = bignum_mul(bx, by); bx 890 src/bignum.c ScmObj Scm_BignumMulSI(ScmBignum *bx, long y) bx 892 src/bignum.c ScmBignum *br = bignum_mul_si(bx, y); bx 896 src/bignum.c ScmObj Scm_BignumMulN(ScmBignum *bx, ScmObj args) bx 898 src/bignum.c ScmBignum *r = bx; bx 2058 src/gauche.h SCM_EXTERN int Scm_BignumCmp(ScmBignum *bx, ScmBignum *by); bx 2059 src/gauche.h SCM_EXTERN int Scm_BignumAbsCmp(ScmBignum *bx, ScmBignum *by); bx 2060 src/gauche.h SCM_EXTERN int Scm_BignumCmp3U(ScmBignum *bx, ScmBignum *off, ScmBignum *by); bx 2061 src/gauche.h SCM_EXTERN ScmObj Scm_BignumComplement(ScmBignum *bx); bx 2063 src/gauche.h SCM_EXTERN ScmObj Scm_BignumAdd(ScmBignum *bx, ScmBignum *by); bx 2064 src/gauche.h SCM_EXTERN ScmObj Scm_BignumAddSI(ScmBignum *bx, long y); bx 2065 src/gauche.h SCM_EXTERN ScmObj Scm_BignumAddN(ScmBignum *bx, ScmObj args); bx 2066 src/gauche.h SCM_EXTERN ScmObj Scm_BignumSub(ScmBignum *bx, ScmBignum *by); bx 2067 src/gauche.h SCM_EXTERN ScmObj Scm_BignumSubSI(ScmBignum *bx, long y); bx 2068 src/gauche.h SCM_EXTERN ScmObj Scm_BignumSubN(ScmBignum *bx, ScmObj args); bx 2069 src/gauche.h SCM_EXTERN ScmObj Scm_BignumMul(ScmBignum *bx, ScmBignum *by); bx 2070 src/gauche.h SCM_EXTERN ScmObj Scm_BignumMulSI(ScmBignum *bx, long y); bx 2071 src/gauche.h SCM_EXTERN ScmObj Scm_BignumMulN(ScmBignum *bx, ScmObj args); bx 2072 src/gauche.h SCM_EXTERN ScmObj Scm_BignumDivSI(ScmBignum *bx, long y, long *r); bx 2073 src/gauche.h SCM_EXTERN ScmObj Scm_BignumDivRem(ScmBignum *bx, ScmBignum *by); bx 2075 src/gauche.h SCM_EXTERN ScmObj Scm_BignumLogAndSI(ScmBignum *bx, long y); bx 2076 src/gauche.h SCM_EXTERN ScmObj Scm_BignumLogAnd(ScmBignum *bx, ScmBignum *by); bx 2077 src/gauche.h SCM_EXTERN ScmObj Scm_BignumLogIor(ScmBignum *bx, ScmBignum *by); bx 2078 src/gauche.h SCM_EXTERN ScmObj Scm_BignumLogXor(ScmBignum *bx, ScmBignum *by); bx 2079 src/gauche.h SCM_EXTERN ScmObj Scm_BignumLogNot(ScmBignum *bx); bx 2080 src/gauche.h SCM_EXTERN ScmObj Scm_BignumLogBit(ScmBignum *bx, int bit); bx 2081 src/gauche.h SCM_EXTERN ScmObj Scm_BignumAsh(ScmBignum *bx, int cnt); bx 1921 src/number.c ScmObj bx = SCM_BIGNUMP(x)? x : Scm_MakeBignumFromSI(SCM_INT_VALUE(x)); bx 1924 src/number.c return Scm_BignumCmp3U(SCM_BIGNUM(bx), SCM_BIGNUM(bd), SCM_BIGNUM(by));