diff --git a/ChangeLog b/ChangeLog index 6841cce638..70b11bd432 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Nov 3 21:45:00 2016 Kenta Murata + + * ext/bigdecimal/bigdecimal.c: Import changes from ruby/bigdecimal + repository. + Thu Nov 3 15:01:29 2016 Nobuyoshi Nakada * file.c: include sys/sysmacros.h for ArchLinux which deprecated diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 8aebb389e9..7df56e3aa1 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -2525,7 +2525,7 @@ BigDecimal_initialize(int argc, VALUE *argv, VALUE self) /* :nodoc: * - * private method to dup and clone the provided BigDecimal +other+ + * private method for dup and clone the provided BigDecimal +other+ */ static VALUE BigDecimal_initialize_copy(VALUE self, VALUE other) @@ -2760,7 +2760,7 @@ BigMath_s_exp(VALUE klass, VALUE x, VALUE vprec) rb_raise(rb_eArgError, "Zero or negative precision for exp"); } - /* TODO: the following switch statement is almostly the same as one in the + /* TODO: the following switch statement is almost same as one in the * BigDecimalCmp function. */ switch (TYPE(x)) { case T_DATA: @@ -2898,7 +2898,7 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec) rb_raise(rb_eArgError, "Zero or negative precision for exp"); } - /* TODO: the following switch statement is almostly the same as one in the + /* TODO: the following switch statement is almost same as one in the * BigDecimalCmp function. */ switch (TYPE(x)) { case T_DATA: @@ -3126,9 +3126,8 @@ get_vp_value: * * Copyright (C) 2002 by Shigeo Kobayashi . * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file - * of the BigDecimal distribution. + * BigDecimal is released under the Ruby and 2-clause BSD licenses. + * See LICENSE.txt for details. * * Maintained by mrkn and ruby-core members. * @@ -3906,28 +3905,28 @@ VpAlloc(size_t mx, const char *szVal) if (mx == 0) ++mx; if (szVal) { - while (ISSPACE(*szVal)) szVal++; - if (*szVal != '#') { - if (mf) { - mf = (mf + BASE_FIG - 1) / BASE_FIG + 2; /* Needs 1 more for div */ - if (mx > mf) { - mx = mf; - } - } - } - else { - ++szVal; - } + while (ISSPACE(*szVal)) szVal++; + if (*szVal != '#') { + if (mf) { + mf = (mf + BASE_FIG - 1) / BASE_FIG + 2; /* Needs 1 more for div */ + if (mx > mf) { + mx = mf; + } + } + } + else { + ++szVal; + } } else { - /* necessary to be able to store */ - /* at least mx digits. */ - /* szVal==NULL ==> allocate zero value. */ - vp = VpAllocReal(mx); - /* xmalloc() alway returns(or throw interruption) */ - vp->MaxPrec = mx; /* set max precision */ - VpSetZero(vp, 1); /* initialize vp to zero. */ - return vp; + /* necessary to be able to store */ + /* at least mx digits. */ + /* szVal==NULL ==> allocate zero value. */ + vp = VpAllocReal(mx); + /* xmalloc() alway returns(or throw interruption) */ + vp->MaxPrec = mx; /* set max precision */ + VpSetZero(vp, 1); /* initialize vp to zero. */ + return vp; } /* Skip all '_' after digit: 2006-6-30 */ @@ -3937,43 +3936,42 @@ VpAlloc(size_t mx, const char *szVal) i = 0; ipn = 0; while ((psz[i] = szVal[ipn]) != 0) { - if (ISDIGIT(psz[i])) ++ni; - if (psz[i] == '_') { - if (ni > 0) { - ipn++; - continue; - } - psz[i] = 0; - break; - } - ++i; - ++ipn; - } - /* Skip trailing spaces */ - while (--i > 0) { - if (ISSPACE(psz[i])) psz[i] = 0; - else break; + if (ISSPACE(psz[i])) { + psz[i] = 0; + break; + } + if (ISDIGIT(psz[i])) ++ni; + if (psz[i] == '_') { + if (ni > 0) { + ipn++; + continue; + } + psz[i] = 0; + break; + } + ++i; + ++ipn; } szVal = psz; /* Check on Inf & NaN */ if (StrCmp(szVal, SZ_PINF) == 0 || StrCmp(szVal, SZ_INF) == 0 ) { - vp = VpAllocReal(1); - vp->MaxPrec = 1; /* set max precision */ - VpSetPosInf(vp); - return vp; + vp = VpAllocReal(1); + vp->MaxPrec = 1; /* set max precision */ + VpSetPosInf(vp); + return vp; } if (StrCmp(szVal, SZ_NINF) == 0) { - vp = VpAllocReal(1); - vp->MaxPrec = 1; /* set max precision */ - VpSetNegInf(vp); - return vp; + vp = VpAllocReal(1); + vp->MaxPrec = 1; /* set max precision */ + VpSetNegInf(vp); + return vp; } if (StrCmp(szVal, SZ_NaN) == 0) { - vp = VpAllocReal(1); - vp->MaxPrec = 1; /* set max precision */ - VpSetNaN(vp); - return vp; + vp = VpAllocReal(1); + vp->MaxPrec = 1; /* set max precision */ + VpSetNaN(vp); + return vp; } /* check on number szVal[] */ @@ -3983,45 +3981,45 @@ VpAlloc(size_t mx, const char *szVal) /* Skip digits */ ni = 0; /* digits in mantissa */ while ((v = szVal[i]) != 0) { - if (!ISDIGIT(v)) break; - ++i; - ++ni; + if (!ISDIGIT(v)) break; + ++i; + ++ni; } nf = 0; ipf = 0; ipe = 0; ne = 0; if (v) { - /* other than digit nor \0 */ - if (szVal[i] == '.') { /* xxx. */ - ++i; - ipf = i; - while ((v = szVal[i]) != 0) { /* get fraction part. */ - if (!ISDIGIT(v)) break; - ++i; - ++nf; - } - } - ipe = 0; /* Exponent */ + /* other than digit nor \0 */ + if (szVal[i] == '.') { /* xxx. */ + ++i; + ipf = i; + while ((v = szVal[i]) != 0) { /* get fraction part. */ + if (!ISDIGIT(v)) break; + ++i; + ++nf; + } + } + ipe = 0; /* Exponent */ - switch (szVal[i]) { - case '\0': - break; - case 'e': case 'E': - case 'd': case 'D': - ++i; - ipe = i; - v = szVal[i]; - if ((v == '-') || (v == '+')) ++i; - while ((v=szVal[i]) != 0) { - if (!ISDIGIT(v)) break; - ++i; - ++ne; - } - break; - default: - break; - } + switch (szVal[i]) { + case '\0': + break; + case 'e': case 'E': + case 'd': case 'D': + ++i; + ipe = i; + v = szVal[i]; + if ((v == '-') || (v == '+')) ++i; + while ((v=szVal[i]) != 0) { + if (!ISDIGIT(v)) break; + ++i; + ++ne; + } + break; + default: + break; + } } nalloc = (ni + nf + BASE_FIG - 1) / BASE_FIG + 1; /* set effective allocation */ /* units for szVal[] */ @@ -4090,7 +4088,7 @@ VpAsgn(Real *c, Real *a, int isw) /* * c = a + b when operation = 1 or 2 - * = a - b when operation = -1 or -2. + * c = a - b when operation = -1 or -2. * Returns number of significant digits of c */ VP_EXPORT size_t @@ -4223,7 +4221,7 @@ end_if: } /* - * Addition of two variable precisional variables + * Addition of two values with variable precision * a and b assuming abs(a)>abs(b). * c = abs(a) + abs(b) ; where |a|>=|b| */ @@ -4982,7 +4980,7 @@ VpComp(Real *a, Real *b) goto Exit; } - /* a and b have same exponent, then compare significand. */ + /* a and b have same exponent, then compare their significand. */ mx = (a->Prec < b->Prec) ? a->Prec : b->Prec; ind = 0; while (ind < mx) {