summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--math.c6
2 files changed, 9 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 02052bc699..c6284ae6af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sat Sep 7 21:33:10 2013 Tanaka Akira <akr@fsij.org>
+
+ * math.c (math_log): Test the sign for bignums.
+ (math_log2): Ditto.
+ (math_log10): Ditto.
+
Sat Sep 7 20:25:47 2013 Tanaka Akira <akr@fsij.org>
* math.c (math_log): Support bignums bigger than 2**1024.
diff --git a/math.c b/math.c
index d79a528b92..a8049297c2 100644
--- a/math.c
+++ b/math.c
@@ -444,7 +444,7 @@ math_log(int argc, VALUE *argv)
rb_scan_args(argc, argv, "11", &x, &base);
- if (TYPE(x) == T_BIGNUM &&
+ if (TYPE(x) == T_BIGNUM && RBIGNUM_POSITIVE_P(x) &&
DBL_MAX_EXP <= (numbits = rb_absint_numwords(x, 1, NULL))) {
numbits -= DBL_MANT_DIG;
x = rb_big_rshift(x, SIZET2NUM(numbits));
@@ -501,7 +501,7 @@ math_log2(VALUE obj, VALUE x)
double d0, d;
size_t numbits = 0;
- if (TYPE(x) == T_BIGNUM &&
+ if (TYPE(x) == T_BIGNUM && RBIGNUM_POSITIVE_P(x) &&
DBL_MAX_EXP <= (numbits = rb_absint_numwords(x, 1, NULL))) {
numbits -= DBL_MANT_DIG;
x = rb_big_rshift(x, SIZET2NUM(numbits));
@@ -540,7 +540,7 @@ math_log10(VALUE obj, VALUE x)
double d0, d;
size_t numbits = 0;
- if (TYPE(x) == T_BIGNUM &&
+ if (TYPE(x) == T_BIGNUM && RBIGNUM_POSITIVE_P(x) &&
DBL_MAX_EXP <= (numbits = rb_absint_numwords(x, 1, NULL))) {
numbits -= DBL_MANT_DIG;
x = rb_big_rshift(x, SIZET2NUM(numbits));