bigdecimal 2.0.0 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bigdecimal.gemspec +3 -3
- data/ext/bigdecimal/bigdecimal.c +26 -13
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f755d262f35a249de6848a00e3bf3b8d7a4816dc9a61bb81c099a22baa40bf66
|
4
|
+
data.tar.gz: f3b06716476c5da9c8a8006b6aeca492ac0206bce305c23910280fe0a0b28de1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35be1b5d13ee12b4b40ab3cf7277fb235fffcaf554f71107fe3b0727bcef9edb6b03c02bd7db0039505a575752a8014f41402775e8080ec9da2dcda184787df5
|
7
|
+
data.tar.gz: f4f063cc6cd0291cbac0f77b2fac485a1e064b08a8789e2ac7b796e6e36529a40a781783bc0417893e01985ad5fa37487c233e5da8fb88eb64c73774de2a9173
|
data/bigdecimal.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
bigdecimal_version = '2.0.
|
3
|
+
bigdecimal_version = '2.0.2'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "bigdecimal"
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.summary = "Arbitrary-precision decimal floating-point number library."
|
12
12
|
s.description = "This library provides arbitrary-precision decimal floating-point number class."
|
13
13
|
s.homepage = "https://github.com/ruby/bigdecimal"
|
14
|
-
s.license = "
|
14
|
+
s.license = "Ruby"
|
15
15
|
|
16
16
|
s.require_paths = %w[lib]
|
17
17
|
s.extensions = %w[ext/bigdecimal/extconf.rb]
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
|
33
33
|
s.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
34
34
|
|
35
|
-
s.add_development_dependency "rake", "
|
35
|
+
s.add_development_dependency "rake", ">= 12.3.3"
|
36
36
|
s.add_development_dependency "rake-compiler", ">= 0.9"
|
37
37
|
s.add_development_dependency "minitest", "< 5.0.0"
|
38
38
|
s.add_development_dependency "pry"
|
data/ext/bigdecimal/bigdecimal.c
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
#include "ruby/util.h"
|
15
15
|
|
16
16
|
#ifndef BIGDECIMAL_DEBUG
|
17
|
+
# undef NDEBUG
|
17
18
|
# define NDEBUG
|
18
19
|
#endif
|
19
20
|
#include <assert.h>
|
@@ -24,7 +25,6 @@
|
|
24
25
|
#include <string.h>
|
25
26
|
#include <errno.h>
|
26
27
|
#include <math.h>
|
27
|
-
#include "math.h"
|
28
28
|
|
29
29
|
#ifdef HAVE_IEEEFP_H
|
30
30
|
#include <ieeefp.h>
|
@@ -367,8 +367,8 @@ BigDecimal_prec(VALUE self)
|
|
367
367
|
VALUE obj;
|
368
368
|
|
369
369
|
GUARD_OBJ(p, GetVpValue(self, 1));
|
370
|
-
obj = rb_assoc_new(
|
371
|
-
|
370
|
+
obj = rb_assoc_new(SIZET2NUM(p->Prec*VpBaseFig()),
|
371
|
+
SIZET2NUM(p->MaxPrec*VpBaseFig()));
|
372
372
|
return obj;
|
373
373
|
}
|
374
374
|
|
@@ -1791,10 +1791,10 @@ BigDecimal_fix(VALUE self)
|
|
1791
1791
|
* more than that many digits.
|
1792
1792
|
*
|
1793
1793
|
* If n is specified and negative, at least that many digits to the left of the
|
1794
|
-
* decimal point will be 0 in the result.
|
1794
|
+
* decimal point will be 0 in the result, and return value will be an Integer.
|
1795
1795
|
*
|
1796
1796
|
* BigDecimal('3.14159').round(3) #=> 3.142
|
1797
|
-
* BigDecimal('13345.234').round(-2) #=> 13300
|
1797
|
+
* BigDecimal('13345.234').round(-2) #=> 13300
|
1798
1798
|
*
|
1799
1799
|
* The value of the optional mode argument can be used to determine how
|
1800
1800
|
* rounding is performed; see BigDecimal.mode.
|
@@ -1807,6 +1807,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self)
|
|
1807
1807
|
int iLoc = 0;
|
1808
1808
|
VALUE vLoc;
|
1809
1809
|
VALUE vRound;
|
1810
|
+
int round_to_int = 0;
|
1810
1811
|
size_t mx, pl;
|
1811
1812
|
|
1812
1813
|
unsigned short sw = VpGetRoundMode();
|
@@ -1814,6 +1815,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self)
|
|
1814
1815
|
switch (rb_scan_args(argc, argv, "02", &vLoc, &vRound)) {
|
1815
1816
|
case 0:
|
1816
1817
|
iLoc = 0;
|
1818
|
+
round_to_int = 1;
|
1817
1819
|
break;
|
1818
1820
|
case 1:
|
1819
1821
|
if (RB_TYPE_P(vLoc, T_HASH)) {
|
@@ -1821,6 +1823,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self)
|
|
1821
1823
|
}
|
1822
1824
|
else {
|
1823
1825
|
iLoc = NUM2INT(vLoc);
|
1826
|
+
if (iLoc < 1) round_to_int = 1;
|
1824
1827
|
}
|
1825
1828
|
break;
|
1826
1829
|
case 2:
|
@@ -1842,7 +1845,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self)
|
|
1842
1845
|
GUARD_OBJ(c, VpCreateRbObject(mx, "0"));
|
1843
1846
|
VpSetPrecLimit(pl);
|
1844
1847
|
VpActiveRound(c, a, sw, iLoc);
|
1845
|
-
if (
|
1848
|
+
if (round_to_int) {
|
1846
1849
|
return BigDecimal_to_i(ToValue(c));
|
1847
1850
|
}
|
1848
1851
|
return ToValue(c);
|
@@ -2091,7 +2094,7 @@ BigDecimal_to_s(int argc, VALUE *argv, VALUE self)
|
|
2091
2094
|
nc += (nc + mc - 1) / mc + 1;
|
2092
2095
|
}
|
2093
2096
|
|
2094
|
-
str =
|
2097
|
+
str = rb_usascii_str_new(0, nc);
|
2095
2098
|
psz = RSTRING_PTR(str);
|
2096
2099
|
|
2097
2100
|
if (fmt) {
|
@@ -2156,7 +2159,7 @@ BigDecimal_split(VALUE self)
|
|
2156
2159
|
rb_ary_push(obj, str);
|
2157
2160
|
rb_str_resize(str, strlen(psz1));
|
2158
2161
|
rb_ary_push(obj, INT2FIX(10));
|
2159
|
-
rb_ary_push(obj,
|
2162
|
+
rb_ary_push(obj, SSIZET2NUM(e));
|
2160
2163
|
return obj;
|
2161
2164
|
}
|
2162
2165
|
|
@@ -2169,7 +2172,7 @@ static VALUE
|
|
2169
2172
|
BigDecimal_exponent(VALUE self)
|
2170
2173
|
{
|
2171
2174
|
ssize_t e = VpExponent10(GetVpValue(self, 1));
|
2172
|
-
return
|
2175
|
+
return SSIZET2NUM(e);
|
2173
2176
|
}
|
2174
2177
|
|
2175
2178
|
/* Returns a string representation of self.
|
@@ -2362,7 +2365,10 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self)
|
|
2362
2365
|
}
|
2363
2366
|
goto retry;
|
2364
2367
|
}
|
2365
|
-
|
2368
|
+
if (NIL_P(prec)) {
|
2369
|
+
n += DBLE_FIG;
|
2370
|
+
}
|
2371
|
+
exp = GetVpValueWithPrec(vexp, DBLE_FIG, 1);
|
2366
2372
|
break;
|
2367
2373
|
|
2368
2374
|
case T_RATIONAL:
|
@@ -2377,6 +2383,9 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self)
|
|
2377
2383
|
goto retry;
|
2378
2384
|
}
|
2379
2385
|
exp = GetVpValueWithPrec(vexp, n, 1);
|
2386
|
+
if (NIL_P(prec)) {
|
2387
|
+
n += n;
|
2388
|
+
}
|
2380
2389
|
break;
|
2381
2390
|
|
2382
2391
|
case T_DATA:
|
@@ -2387,6 +2396,10 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self)
|
|
2387
2396
|
vexp = BigDecimal_to_i(vexp);
|
2388
2397
|
goto retry;
|
2389
2398
|
}
|
2399
|
+
if (NIL_P(prec)) {
|
2400
|
+
GUARD_OBJ(y, GetVpValue(vexp, 1));
|
2401
|
+
n += y->Prec*VpBaseFig();
|
2402
|
+
}
|
2390
2403
|
exp = DATA_PTR(vexp);
|
2391
2404
|
break;
|
2392
2405
|
}
|
@@ -2802,7 +2815,7 @@ static VALUE
|
|
2802
2815
|
BigDecimal_limit(int argc, VALUE *argv, VALUE self)
|
2803
2816
|
{
|
2804
2817
|
VALUE nFig;
|
2805
|
-
VALUE nCur =
|
2818
|
+
VALUE nCur = SIZET2NUM(VpGetPrecLimit());
|
2806
2819
|
|
2807
2820
|
if (rb_scan_args(argc, argv, "01", &nFig) == 1) {
|
2808
2821
|
int nf;
|
@@ -4180,7 +4193,7 @@ VpAlloc(size_t mx, const char *szVal, int strict_p, int exc)
|
|
4180
4193
|
/* at least mx digits. */
|
4181
4194
|
/* szVal==NULL ==> allocate zero value. */
|
4182
4195
|
vp = VpAllocReal(mx);
|
4183
|
-
/* xmalloc()
|
4196
|
+
/* xmalloc() always returns(or throw interruption) */
|
4184
4197
|
vp->MaxPrec = mx; /* set max precision */
|
4185
4198
|
VpSetZero(vp, 1); /* initialize vp to zero. */
|
4186
4199
|
return vp;
|
@@ -4356,7 +4369,7 @@ VpAlloc(size_t mx, const char *szVal, int strict_p, int exc)
|
|
4356
4369
|
nalloc = Max(nalloc, mx);
|
4357
4370
|
mx = nalloc;
|
4358
4371
|
vp = VpAllocReal(mx);
|
4359
|
-
/* xmalloc()
|
4372
|
+
/* xmalloc() always returns(or throw interruption) */
|
4360
4373
|
vp->MaxPrec = mx; /* set max precision */
|
4361
4374
|
VpSetZero(vp, sign);
|
4362
4375
|
VpCtoV(vp, psz, ni, psz + ipf, nf, psz + ipe, ne);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bigdecimal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenta Murata
|
@@ -10,22 +10,22 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2020-12-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - "
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 12.3.3
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- - "
|
26
|
+
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
28
|
+
version: 12.3.3
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rake-compiler
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,7 +92,7 @@ files:
|
|
92
92
|
- sample/pi.rb
|
93
93
|
homepage: https://github.com/ruby/bigdecimal
|
94
94
|
licenses:
|
95
|
-
-
|
95
|
+
- Ruby
|
96
96
|
metadata: {}
|
97
97
|
post_install_message:
|
98
98
|
rdoc_options: []
|
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
requirements: []
|
112
|
-
rubygems_version: 3.
|
112
|
+
rubygems_version: 3.1.4
|
113
113
|
signing_key:
|
114
114
|
specification_version: 4
|
115
115
|
summary: Arbitrary-precision decimal floating-point number library.
|