diff options
author | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-03 12:46:22 +0000 |
---|---|---|
committer | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-03 12:46:22 +0000 |
commit | 03c9bc2b1d793ee3763d5f3437a5f4184fa20c13 (patch) | |
tree | 26428a9d7eba9f586eebbb078998cf842a83278e /ext | |
parent | 6c7024f6f4eb06a09d2940cb5ba32d09f11ff13b (diff) | |
download | ruby-03c9bc2b1d793ee3763d5f3437a5f4184fa20c13.tar.gz |
Import from ruby/bigdecimal repository
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/bigdecimal/bigdecimal.c | 178 |
1 files changed, 88 insertions, 90 deletions
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 <shigeo@tinyforest.gr.jp>. * - * 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 <mrkn@mrkn.jp> 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 */ - - 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; - } + /* 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; + } } 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) { |