summaryrefslogtreecommitdiff
path: root/bignum.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-09-09 15:27:34 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-09-09 15:27:34 +0000
commit962f59a3755ee50e0bfbbf7013a546ae68da6143 (patch)
tree903e00525a2e291298f232b1c1591f9656a60378 /bignum.c
parent32ba9eabf32ccca162987d461d916b06d1712ff1 (diff)
* bignum.c (rb_big_mul0): bignum multiplication without
normalization. * bignum.c (rb_big_pow): use rb_big_mul0(). [ruby-dev:29547] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10898 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/bignum.c b/bignum.c
index df702e2..b5d405b 100644
--- a/bignum.c
+++ b/bignum.c
@@ -1206,15 +1206,8 @@ rb_big_minus(x, y)
}
}
-/*
- * call-seq:
- * big * other => Numeric
- *
- * Multiplies big and other, returning the result.
- */
-
VALUE
-rb_big_mul(x, y)
+rb_big_mul0(x, y)
VALUE x, y;
{
long i, j;
@@ -1257,7 +1250,21 @@ rb_big_mul(x, y)
}
}
- return bignorm(z);
+ return z;
+}
+
+/*
+ * call-seq:
+ * big * other => Numeric
+ *
+ * Multiplies big and other, returning the result.
+ */
+
+VALUE
+rb_big_mul(x, y)
+ VALUE x, y;
+{
+ return bignorm(rb_big_mul0(x, y));
}
static void
@@ -1616,10 +1623,10 @@ rb_big_pow(x, y)
if (yy == 0) break;
while (yy % 2 == 0) {
yy /= 2;
- x = rb_big_mul(x, x);
+ x = rb_big_mul0(x, x);
if (!BDIGITS(x)[RBIGNUM(x)->len-1]) RBIGNUM(x)->len--;
}
- z = rb_big_mul(z, x);
+ z = rb_big_mul0(z, x);
if (!BDIGITS(z)[RBIGNUM(z)->len-1]) RBIGNUM(z)->len--;
}
return bignorm(z);