e$BK-J!$G$9!#e(B
e$BITMW$Je(B FIXNUMe$BMQ$N=hM}$N:o=|$H%o!<%/MQe(BBignum
e$B$N8eJRIU$1$G$9!#e(B
— bignum.c.org
+++ bignum.c
@@ -893,21 +893,6 @@
long lh, ll, m1;
VALUE b, q, r;
- if (FIXNUM_P(x)) {
-
VALUE str = rb_fix2str(x, base); -
char* str_ptr = RSTRING_PTR(str); -
long str_len = RSTRING_LEN(str); -
if (trim) { -
if (FIX2INT(x) == 0) return 0; -
MEMCPY(ptr, str_ptr, char, str_len); -
return str_len; -
} -
else { -
memset(ptr, '0', len - str_len); -
MEMCPY(ptr + len - str_len, str_ptr, char, str_len); -
return len; -
} - }
if (BIGZEROP(x)) {
if (trim) return 0;
else {
@@ -924,8 +909,10 @@
bigdivmod(x, b, &q, &r);
lh = big2str_karatsuba(q, base, ptr, (len - m1)/2,
len - m1, hbase, trim);
-
rb_big_resize(q, 0);
ll = big2str_karatsuba(r, base, ptr + lh, m1/2,
m1, hbase, !lh && trim); -
rb_big_resize(r, 0);
return lh + ll;
}
@@ -968,6 +955,7 @@
len = off + big2str_karatsuba(xx, base, ptr + off, n1,
n2, hbase, trim);
} -
rb_big_resize(xx, 0);
ptr[len] = ‘\0’;
rb_str_resize(ss, len);
GE,$rKPLG$G$-$k$H$O;W$$$^$9$,B>$N%P%0$HF1MM$KKPLGe(B