bigdecimal 1.4.3.pre.20190110 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20713bc60960a4a3a09cade6de0a9ac669a9f7e73c191ac21eea2febf4a951ca
4
- data.tar.gz: 9224fe24f3e22de33964cb9398c5bbd6b2bb94693367f08731c6151ca2e1e55e
3
+ metadata.gz: 1b3519c64aa42c80e19107fc6d5d78d81385d7d71b9c09abef67c4e4c6a0bcef
4
+ data.tar.gz: 4ab9cb50f0a24014262635c07ecb42e6891326b49de50f262550e22d00c586ed
5
5
  SHA512:
6
- metadata.gz: 9a62bfca25e44ca876a9a940be39969d358a1b8409cfb8ad0d1a927837ace817f5b3248967c6d3be8fca46837392c28b43a590bd58276c0a81e22159e395721e
7
- data.tar.gz: ba6050a71d377a969fb1c79db892965871ff35f4f69a7f8c91eb67f81825c262035f2b119121582a3a791ca1cb86a12a7f2c4b9bc6bb598e815d289c6a26ed19
6
+ metadata.gz: 8e4aa6023012625b46f68a9e58d79a5ea0aa2c579ddb4245e0753a01118d62bd75fa5a708535346ab295619aa2ad9974a929189a83a00d56321c295a1ec8498c
7
+ data.tar.gz: 5717f808a7a56ae06b5060a3752fcaf3a9b47dca9dceb8e6822e603ec20f0296b711df04d1454a309ac6720d4af60e9b4e58f3477133f7a66e20eab75207a70e
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- bigdecimal_version = '1.4.3.pre.20190110'
3
+ bigdecimal_version = '3.0.0'
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "bigdecimal"
@@ -11,19 +11,14 @@ 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 = "ruby"
14
+ s.license = "Ruby"
15
15
 
16
16
  s.require_paths = %w[lib]
17
- s.extensions = %w[ext/bigdecimal/extconf.rb ext/bigdecimal/util/extconf.rb]
17
+ s.extensions = %w[ext/bigdecimal/extconf.rb]
18
18
  s.files = %w[
19
19
  bigdecimal.gemspec
20
20
  ext/bigdecimal/bigdecimal.c
21
- ext/bigdecimal/bigdecimal.def
22
21
  ext/bigdecimal/bigdecimal.h
23
- ext/bigdecimal/depend
24
- ext/bigdecimal/extconf.rb
25
- ext/bigdecimal/util/extconf.rb
26
- ext/bigdecimal/util/util.c
27
22
  lib/bigdecimal.rb
28
23
  lib/bigdecimal/jacobian.rb
29
24
  lib/bigdecimal/ludcmp.rb
@@ -35,11 +30,10 @@ Gem::Specification.new do |s|
35
30
  sample/pi.rb
36
31
  ]
37
32
 
38
- s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
33
+ s.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
39
34
 
40
- s.add_development_dependency "rake", "~> 10.0"
35
+ s.add_development_dependency "rake", ">= 12.3.3"
41
36
  s.add_development_dependency "rake-compiler", ">= 0.9"
42
- s.add_development_dependency "rake-compiler-dock", ">= 0.6.1"
43
37
  s.add_development_dependency "minitest", "< 5.0.0"
44
38
  s.add_development_dependency "pry"
45
39
  end
@@ -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>
@@ -77,7 +77,7 @@ static ID id_half;
77
77
  #define BASE1 (BASE/10)
78
78
 
79
79
  #ifndef DBLE_FIG
80
- #define DBLE_FIG (DBL_DIG+1) /* figure of double */
80
+ #define DBLE_FIG rmpd_double_figures() /* figure of double */
81
81
  #endif
82
82
 
83
83
  #ifndef RRATIONAL_ZERO_P
@@ -127,6 +127,30 @@ rb_rational_den(VALUE rat)
127
127
  }
128
128
  #endif
129
129
 
130
+ #ifndef HAVE_RB_COMPLEX_REAL
131
+ static inline VALUE
132
+ rb_complex_real(VALUE cmp)
133
+ {
134
+ #ifdef HAVE_TYPE_STRUCT_RCOMPLEX
135
+ return RCOMPLEX(cmp)->real;
136
+ #else
137
+ return rb_funcall(cmp, rb_intern("real"), 0);
138
+ #endif
139
+ }
140
+ #endif
141
+
142
+ #ifndef HAVE_RB_COMPLEX_IMAG
143
+ static inline VALUE
144
+ rb_complex_imag(VALUE cmp)
145
+ {
146
+ #ifdef HAVE_TYPE_STRUCT_RCOMPLEX
147
+ return RCOMPLEX(cmp)->imag;
148
+ #else
149
+ return rb_funcall(cmp, rb_intern("imag"), 0);
150
+ #endif
151
+ }
152
+ #endif
153
+
130
154
  #define BIGDECIMAL_POSITIVE_P(bd) ((bd)->sign > 0)
131
155
  #define BIGDECIMAL_NEGATIVE_P(bd) ((bd)->sign < 0)
132
156
 
@@ -165,11 +189,16 @@ BigDecimal_memsize(const void *ptr)
165
189
  return (sizeof(*pv) + pv->MaxPrec * sizeof(BDIGIT));
166
190
  }
167
191
 
192
+ #ifndef HAVE_RB_EXT_RACTOR_SAFE
193
+ # undef RUBY_TYPED_FROZEN_SHAREABLE
194
+ # define RUBY_TYPED_FROZEN_SHAREABLE 0
195
+ #endif
196
+
168
197
  static const rb_data_type_t BigDecimal_data_type = {
169
198
  "BigDecimal",
170
199
  { 0, BigDecimal_delete, BigDecimal_memsize, },
171
200
  #ifdef RUBY_TYPED_FREE_IMMEDIATELY
172
- 0, 0, RUBY_TYPED_FREE_IMMEDIATELY
201
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE
173
202
  #endif
174
203
  };
175
204
 
@@ -228,7 +257,7 @@ again:
228
257
  switch(TYPE(v)) {
229
258
  case T_FLOAT:
230
259
  if (prec < 0) goto unable_to_coerce_without_prec;
231
- if (prec > DBL_DIG+1) goto SomeOneMayDoIt;
260
+ if (prec > (long)DBLE_FIG) goto SomeOneMayDoIt;
232
261
  d = RFLOAT_VALUE(v);
233
262
  if (!isfinite(d)) {
234
263
  pv = VpCreateRbObject(1, NULL);
@@ -276,7 +305,6 @@ again:
276
305
  #ifdef ENABLE_NUMERIC_STRING
277
306
  case T_STRING:
278
307
  StringValueCStr(v);
279
- rb_check_safe_obj(v);
280
308
  return VpCreateRbObject(RSTRING_LEN(v) + VpBaseFig() + 1,
281
309
  RSTRING_PTR(v));
282
310
  #endif /* ENABLE_NUMERIC_STRING */
@@ -327,11 +355,13 @@ BigDecimal_double_fig(VALUE self)
327
355
  /* call-seq:
328
356
  * big_decimal.precs -> array
329
357
  *
330
- * Returns an Array of two Integer values.
358
+ * Returns an Array of two Integer values that represent platform-dependent
359
+ * internal storage properties.
331
360
  *
332
- * The first value is the current number of significant digits in the
333
- * BigDecimal. The second value is the maximum number of significant digits
334
- * for the BigDecimal.
361
+ * This method is deprecated and will be removed in the future.
362
+ * Instead, use BigDecimal#n_significant_digits for obtaining the number of
363
+ * significant digits in scientific notation, and BigDecimal#precision for
364
+ * obtaining the number of digits in decimal notation.
335
365
  *
336
366
  * BigDecimal('5').precs #=> [9, 18]
337
367
  */
@@ -343,12 +373,109 @@ BigDecimal_prec(VALUE self)
343
373
  Real *p;
344
374
  VALUE obj;
345
375
 
376
+ rb_category_warn(RB_WARN_CATEGORY_DEPRECATED,
377
+ "BigDecimal#precs is deprecated and will be removed in the future; "
378
+ "use BigDecimal#precision instead.");
379
+
346
380
  GUARD_OBJ(p, GetVpValue(self, 1));
347
- obj = rb_assoc_new(INT2NUM(p->Prec*VpBaseFig()),
348
- INT2NUM(p->MaxPrec*VpBaseFig()));
381
+ obj = rb_assoc_new(SIZET2NUM(p->Prec*VpBaseFig()),
382
+ SIZET2NUM(p->MaxPrec*VpBaseFig()));
349
383
  return obj;
350
384
  }
351
385
 
386
+ /*
387
+ * call-seq:
388
+ * big_decimal.precision -> intreger
389
+ *
390
+ * Returns the number of decimal digits in this number.
391
+ *
392
+ * Example:
393
+ *
394
+ * BigDecimal("0").precision # => 0
395
+ * BigDecimal("1").precision # => 1
396
+ * BigDecimal("-1e20").precision # => 21
397
+ * BigDecimal("1e-20").precision # => 20
398
+ * BigDecimal("Infinity").precision # => 0
399
+ * BigDecimal("-Infinity").precision # => 0
400
+ * BigDecimal("NaN").precision # => 0
401
+ */
402
+ static VALUE
403
+ BigDecimal_precision(VALUE self)
404
+ {
405
+ ENTER(1);
406
+
407
+ Real *p;
408
+ GUARD_OBJ(p, GetVpValue(self, 1));
409
+
410
+ /*
411
+ * The most significant digit is frac[0], and the least significant digit is frac[Prec-1].
412
+ * When the exponent is zero, the decimal point is located just before frac[0].
413
+ * When the exponent is negative, the decimal point moves to leftward.
414
+ * Conversely, when the exponent is positive, the decimal point moves to rightward.
415
+ *
416
+ * | frac[0] frac[1] frac[2] . frac[3] frac[4] ... frac[Prec-1]
417
+ * |------------------------> exponent == 3
418
+ */
419
+
420
+ ssize_t ex = p->exponent;
421
+ ssize_t precision;
422
+ if (ex < 0) {
423
+ precision = (-ex + 1) * BASE_FIG; /* 1 is for p->frac[0] */
424
+ ex = 0;
425
+ }
426
+ else if (p->Prec > 0) {
427
+ BDIGIT x = p->frac[0];
428
+ for (precision = 0; x > 0; x /= 10) {
429
+ ++precision;
430
+ }
431
+ }
432
+
433
+ if (ex > (ssize_t)p->Prec) {
434
+ precision += (ex - 1) * BASE_FIG;
435
+ }
436
+ else if (p->Prec > 0) {
437
+ ssize_t n = (ssize_t)p->Prec - 1;
438
+ while (n > 0 && p->frac[n] == 0) --n;
439
+
440
+ precision += n * BASE_FIG;
441
+
442
+ if (ex < (ssize_t)p->Prec) {
443
+ BDIGIT x = p->frac[n];
444
+ for (; x > 0 && x % 10 == 0; x /= 10) {
445
+ --precision;
446
+ }
447
+ }
448
+ }
449
+
450
+ return SSIZET2NUM(precision);
451
+ }
452
+
453
+ static VALUE
454
+ BigDecimal_n_significant_digits(VALUE self)
455
+ {
456
+ ENTER(1);
457
+
458
+ Real *p;
459
+ GUARD_OBJ(p, GetVpValue(self, 1));
460
+
461
+ ssize_t n = p->Prec;
462
+ while (n > 0 && p->frac[n-1] == 0) --n;
463
+ if (n <= 0) {
464
+ return INT2FIX(0);
465
+ }
466
+
467
+ int nlz, ntz;
468
+
469
+ BDIGIT x = p->frac[0];
470
+ for (nlz = BASE_FIG; x > 0; x /= 10) --nlz;
471
+
472
+ x = p->frac[n-1];
473
+ for (ntz = 0; x > 0 && x % 10 == 0; x /= 10) ++ntz;
474
+
475
+ ssize_t n_digits = BASE_FIG * n - nlz - ntz;
476
+ return SSIZET2NUM(n_digits);
477
+ }
478
+
352
479
  /*
353
480
  * call-seq: hash
354
481
  *
@@ -418,7 +545,6 @@ BigDecimal_load(VALUE self, VALUE str)
418
545
  unsigned long m=0;
419
546
 
420
547
  pch = (unsigned char *)StringValueCStr(str);
421
- rb_check_safe_obj(str);
422
548
  /* First get max prec */
423
549
  while((*pch) != (unsigned char)'\0' && (ch = *pch++) != (unsigned char)':') {
424
550
  if(!ISDIGIT(ch)) {
@@ -877,7 +1003,7 @@ BigDecimal_coerce(VALUE self, VALUE other)
877
1003
  Real *b;
878
1004
 
879
1005
  if (RB_TYPE_P(other, T_FLOAT)) {
880
- GUARD_OBJ(b, GetVpValueWithPrec(other, DBL_DIG+1, 1));
1006
+ GUARD_OBJ(b, GetVpValueWithPrec(other, DBLE_FIG, 1));
881
1007
  obj = rb_assoc_new(ToValue(b), self);
882
1008
  }
883
1009
  else {
@@ -935,7 +1061,7 @@ BigDecimal_add(VALUE self, VALUE r)
935
1061
 
936
1062
  GUARD_OBJ(a, GetVpValue(self, 1));
937
1063
  if (RB_TYPE_P(r, T_FLOAT)) {
938
- b = GetVpValueWithPrec(r, DBL_DIG+1, 1);
1064
+ b = GetVpValueWithPrec(r, DBLE_FIG, 1);
939
1065
  }
940
1066
  else if (RB_TYPE_P(r, T_RATIONAL)) {
941
1067
  b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1);
@@ -993,7 +1119,7 @@ BigDecimal_sub(VALUE self, VALUE r)
993
1119
 
994
1120
  GUARD_OBJ(a, GetVpValue(self,1));
995
1121
  if (RB_TYPE_P(r, T_FLOAT)) {
996
- b = GetVpValueWithPrec(r, DBL_DIG+1, 1);
1122
+ b = GetVpValueWithPrec(r, DBLE_FIG, 1);
997
1123
  }
998
1124
  else if (RB_TYPE_P(r, T_RATIONAL)) {
999
1125
  b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1);
@@ -1043,7 +1169,7 @@ BigDecimalCmp(VALUE self, VALUE r,char op)
1043
1169
  break;
1044
1170
 
1045
1171
  case T_FLOAT:
1046
- GUARD_OBJ(b, GetVpValueWithPrec(r, DBL_DIG+1, 0));
1172
+ GUARD_OBJ(b, GetVpValueWithPrec(r, DBLE_FIG, 0));
1047
1173
  break;
1048
1174
 
1049
1175
  case T_RATIONAL:
@@ -1256,7 +1382,7 @@ BigDecimal_mult(VALUE self, VALUE r)
1256
1382
 
1257
1383
  GUARD_OBJ(a, GetVpValue(self, 1));
1258
1384
  if (RB_TYPE_P(r, T_FLOAT)) {
1259
- b = GetVpValueWithPrec(r, DBL_DIG+1, 1);
1385
+ b = GetVpValueWithPrec(r, DBLE_FIG, 1);
1260
1386
  }
1261
1387
  else if (RB_TYPE_P(r, T_RATIONAL)) {
1262
1388
  b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1);
@@ -1284,7 +1410,7 @@ BigDecimal_divide(Real **c, Real **res, Real **div, VALUE self, VALUE r)
1284
1410
 
1285
1411
  GUARD_OBJ(a, GetVpValue(self, 1));
1286
1412
  if (RB_TYPE_P(r, T_FLOAT)) {
1287
- b = GetVpValueWithPrec(r, DBL_DIG+1, 1);
1413
+ b = GetVpValueWithPrec(r, DBLE_FIG, 1);
1288
1414
  }
1289
1415
  else if (RB_TYPE_P(r, T_RATIONAL)) {
1290
1416
  b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1);
@@ -1350,7 +1476,7 @@ BigDecimal_DoDivmod(VALUE self, VALUE r, Real **div, Real **mod)
1350
1476
 
1351
1477
  GUARD_OBJ(a, GetVpValue(self, 1));
1352
1478
  if (RB_TYPE_P(r, T_FLOAT)) {
1353
- b = GetVpValueWithPrec(r, DBL_DIG+1, 1);
1479
+ b = GetVpValueWithPrec(r, DBLE_FIG, 1);
1354
1480
  }
1355
1481
  else if (RB_TYPE_P(r, T_RATIONAL)) {
1356
1482
  b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1);
@@ -1451,7 +1577,7 @@ BigDecimal_divremain(VALUE self, VALUE r, Real **dv, Real **rv)
1451
1577
 
1452
1578
  GUARD_OBJ(a, GetVpValue(self, 1));
1453
1579
  if (RB_TYPE_P(r, T_FLOAT)) {
1454
- b = GetVpValueWithPrec(r, DBL_DIG+1, 1);
1580
+ b = GetVpValueWithPrec(r, DBLE_FIG, 1);
1455
1581
  }
1456
1582
  else if (RB_TYPE_P(r, T_RATIONAL)) {
1457
1583
  b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1);
@@ -1756,20 +1882,23 @@ BigDecimal_fix(VALUE self)
1756
1882
  * round(n, mode)
1757
1883
  *
1758
1884
  * Round to the nearest integer (by default), returning the result as a
1759
- * BigDecimal.
1885
+ * BigDecimal if n is specified, or as an Integer if it isn't.
1760
1886
  *
1761
1887
  * BigDecimal('3.14159').round #=> 3
1762
1888
  * BigDecimal('8.7').round #=> 9
1763
1889
  * BigDecimal('-9.9').round #=> -10
1764
1890
  *
1891
+ * BigDecimal('3.14159').round(2).class.name #=> "BigDecimal"
1892
+ * BigDecimal('3.14159').round.class.name #=> "Integer"
1893
+ *
1765
1894
  * If n is specified and positive, the fractional part of the result has no
1766
1895
  * more than that many digits.
1767
1896
  *
1768
1897
  * If n is specified and negative, at least that many digits to the left of the
1769
- * decimal point will be 0 in the result.
1898
+ * decimal point will be 0 in the result, and return value will be an Integer.
1770
1899
  *
1771
1900
  * BigDecimal('3.14159').round(3) #=> 3.142
1772
- * BigDecimal('13345.234').round(-2) #=> 13300.0
1901
+ * BigDecimal('13345.234').round(-2) #=> 13300
1773
1902
  *
1774
1903
  * The value of the optional mode argument can be used to determine how
1775
1904
  * rounding is performed; see BigDecimal.mode.
@@ -1782,6 +1911,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self)
1782
1911
  int iLoc = 0;
1783
1912
  VALUE vLoc;
1784
1913
  VALUE vRound;
1914
+ int round_to_int = 0;
1785
1915
  size_t mx, pl;
1786
1916
 
1787
1917
  unsigned short sw = VpGetRoundMode();
@@ -1789,6 +1919,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self)
1789
1919
  switch (rb_scan_args(argc, argv, "02", &vLoc, &vRound)) {
1790
1920
  case 0:
1791
1921
  iLoc = 0;
1922
+ round_to_int = 1;
1792
1923
  break;
1793
1924
  case 1:
1794
1925
  if (RB_TYPE_P(vLoc, T_HASH)) {
@@ -1796,6 +1927,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self)
1796
1927
  }
1797
1928
  else {
1798
1929
  iLoc = NUM2INT(vLoc);
1930
+ if (iLoc < 1) round_to_int = 1;
1799
1931
  }
1800
1932
  break;
1801
1933
  case 2:
@@ -1817,7 +1949,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self)
1817
1949
  GUARD_OBJ(c, VpCreateRbObject(mx, "0"));
1818
1950
  VpSetPrecLimit(pl);
1819
1951
  VpActiveRound(c, a, sw, iLoc);
1820
- if (argc == 0) {
1952
+ if (round_to_int) {
1821
1953
  return BigDecimal_to_i(ToValue(c));
1822
1954
  }
1823
1955
  return ToValue(c);
@@ -2027,7 +2159,6 @@ BigDecimal_to_s(int argc, VALUE *argv, VALUE self)
2027
2159
  if (rb_scan_args(argc, argv, "01", &f) == 1) {
2028
2160
  if (RB_TYPE_P(f, T_STRING)) {
2029
2161
  psz = StringValueCStr(f);
2030
- rb_check_safe_obj(f);
2031
2162
  if (*psz == ' ') {
2032
2163
  fPlus = 1;
2033
2164
  psz++;
@@ -2067,7 +2198,7 @@ BigDecimal_to_s(int argc, VALUE *argv, VALUE self)
2067
2198
  nc += (nc + mc - 1) / mc + 1;
2068
2199
  }
2069
2200
 
2070
- str = rb_str_new(0, nc);
2201
+ str = rb_usascii_str_new(0, nc);
2071
2202
  psz = RSTRING_PTR(str);
2072
2203
 
2073
2204
  if (fmt) {
@@ -2132,7 +2263,7 @@ BigDecimal_split(VALUE self)
2132
2263
  rb_ary_push(obj, str);
2133
2264
  rb_str_resize(str, strlen(psz1));
2134
2265
  rb_ary_push(obj, INT2FIX(10));
2135
- rb_ary_push(obj, INT2NUM(e));
2266
+ rb_ary_push(obj, SSIZET2NUM(e));
2136
2267
  return obj;
2137
2268
  }
2138
2269
 
@@ -2145,7 +2276,7 @@ static VALUE
2145
2276
  BigDecimal_exponent(VALUE self)
2146
2277
  {
2147
2278
  ssize_t e = VpExponent10(GetVpValue(self, 1));
2148
- return INT2NUM(e);
2279
+ return SSIZET2NUM(e);
2149
2280
  }
2150
2281
 
2151
2282
  /* Returns a string representation of self.
@@ -2338,7 +2469,10 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self)
2338
2469
  }
2339
2470
  goto retry;
2340
2471
  }
2341
- exp = GetVpValueWithPrec(vexp, DBL_DIG+1, 1);
2472
+ if (NIL_P(prec)) {
2473
+ n += DBLE_FIG;
2474
+ }
2475
+ exp = GetVpValueWithPrec(vexp, DBLE_FIG, 1);
2342
2476
  break;
2343
2477
 
2344
2478
  case T_RATIONAL:
@@ -2353,6 +2487,9 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self)
2353
2487
  goto retry;
2354
2488
  }
2355
2489
  exp = GetVpValueWithPrec(vexp, n, 1);
2490
+ if (NIL_P(prec)) {
2491
+ n += n;
2492
+ }
2356
2493
  break;
2357
2494
 
2358
2495
  case T_DATA:
@@ -2363,6 +2500,10 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self)
2363
2500
  vexp = BigDecimal_to_i(vexp);
2364
2501
  goto retry;
2365
2502
  }
2503
+ if (NIL_P(prec)) {
2504
+ GUARD_OBJ(y, GetVpValue(vexp, 1));
2505
+ n += y->Prec*VpBaseFig();
2506
+ }
2366
2507
  exp = DATA_PTR(vexp);
2367
2508
  break;
2368
2509
  }
@@ -2560,6 +2701,10 @@ BigDecimal_clone(VALUE self)
2560
2701
  return self;
2561
2702
  }
2562
2703
 
2704
+ #ifdef HAVE_RB_OPTS_EXCEPTION_P
2705
+ int rb_opts_exception_p(VALUE opts, int default_value);
2706
+ #define opts_exception_p(opts) rb_opts_exception_p((opts), 1)
2707
+ #else
2563
2708
  static int
2564
2709
  opts_exception_p(VALUE opts)
2565
2710
  {
@@ -2568,12 +2713,20 @@ opts_exception_p(VALUE opts)
2568
2713
  if (!kwds[0]) {
2569
2714
  kwds[0] = rb_intern_const("exception");
2570
2715
  }
2571
- rb_get_kwargs(opts, kwds, 0, 1, &exception);
2716
+ if (!rb_get_kwargs(opts, kwds, 0, 1, &exception)) return 1;
2717
+ switch (exception) {
2718
+ case Qtrue: case Qfalse:
2719
+ break;
2720
+ default:
2721
+ rb_raise(rb_eArgError, "true or false is expected as exception: %+"PRIsVALUE,
2722
+ exception);
2723
+ }
2572
2724
  return exception != Qfalse;
2573
2725
  }
2726
+ #endif
2574
2727
 
2575
2728
  static Real *
2576
- VpNewVarArgs(int argc, VALUE *argv)
2729
+ VpNewVarArg(int argc, VALUE *argv)
2577
2730
  {
2578
2731
  size_t mf;
2579
2732
  VALUE opts = Qnil;
@@ -2616,6 +2769,7 @@ VpNewVarArgs(int argc, VALUE *argv)
2616
2769
  }
2617
2770
  }
2618
2771
 
2772
+ retry:
2619
2773
  switch (TYPE(iniValue)) {
2620
2774
  case T_DATA:
2621
2775
  if (is_kind_of_BigDecimal(iniValue)) {
@@ -2635,7 +2789,7 @@ VpNewVarArgs(int argc, VALUE *argv)
2635
2789
  VpDtoV(pv, d);
2636
2790
  return pv;
2637
2791
  }
2638
- if (mf > DBL_DIG+1) {
2792
+ if (mf > DBLE_FIG) {
2639
2793
  if (!exc) {
2640
2794
  return NULL;
2641
2795
  }
@@ -2653,6 +2807,18 @@ VpNewVarArgs(int argc, VALUE *argv)
2653
2807
  }
2654
2808
  return GetVpValueWithPrec(iniValue, mf, 1);
2655
2809
 
2810
+ case T_COMPLEX:
2811
+ {
2812
+ VALUE im;
2813
+ im = rb_complex_imag(iniValue);
2814
+ if (!is_zero(im)) {
2815
+ rb_raise(rb_eArgError,
2816
+ "Unable to make a BigDecimal from non-zero imaginary number");
2817
+ }
2818
+ iniValue = rb_complex_real(iniValue);
2819
+ goto retry;
2820
+ }
2821
+
2656
2822
  case T_STRING:
2657
2823
  /* fall through */
2658
2824
  default:
@@ -2667,23 +2833,6 @@ VpNewVarArgs(int argc, VALUE *argv)
2667
2833
  return VpAlloc(mf, RSTRING_PTR(iniValue), 1, exc);
2668
2834
  }
2669
2835
 
2670
- static VALUE
2671
- BigDecimal_new(int argc, VALUE *argv, VALUE klass)
2672
- {
2673
- ENTER(1);
2674
- Real *pv;
2675
- VALUE obj;
2676
-
2677
- obj = TypedData_Wrap_Struct(klass, &BigDecimal_data_type, 0);
2678
- pv = VpNewVarArgs(argc, argv);
2679
- if (pv == NULL) return Qnil;
2680
- SAVE(pv);
2681
- if (ToValue(pv)) pv = VpCopy(NULL, pv);
2682
- RTYPEDDATA_DATA(obj) = pv;
2683
- RB_OBJ_FREEZE(obj);
2684
- return pv->obj = obj;
2685
- }
2686
-
2687
2836
  /* call-seq:
2688
2837
  * BigDecimal(initial, digits, exception: true)
2689
2838
  *
@@ -2723,14 +2872,35 @@ BigDecimal_new(int argc, VALUE *argv, VALUE klass)
2723
2872
  static VALUE
2724
2873
  f_BigDecimal(int argc, VALUE *argv, VALUE self)
2725
2874
  {
2726
- return BigDecimal_new(argc, argv, rb_cBigDecimal);
2875
+ ENTER(1);
2876
+ Real *pv;
2877
+ VALUE obj;
2878
+
2879
+ if (argc > 0 && CLASS_OF(argv[0]) == rb_cBigDecimal) {
2880
+ if (argc == 1 || (argc == 2 && RB_TYPE_P(argv[1], T_HASH))) return argv[0];
2881
+ }
2882
+ obj = TypedData_Wrap_Struct(rb_cBigDecimal, &BigDecimal_data_type, 0);
2883
+ pv = VpNewVarArg(argc, argv);
2884
+ if (pv == NULL) return Qnil;
2885
+ SAVE(pv);
2886
+ if (ToValue(pv)) pv = VpCopy(NULL, pv);
2887
+ RTYPEDDATA_DATA(obj) = pv;
2888
+ RB_OBJ_FREEZE(obj);
2889
+ return pv->obj = obj;
2727
2890
  }
2728
2891
 
2729
- /* DEPRECATED: BigDecimal.new() */
2730
2892
  static VALUE
2731
- BigDecimal_s_new(int argc, VALUE *argv, VALUE klass)
2893
+ BigDecimal_s_interpret_loosely(VALUE klass, VALUE str)
2732
2894
  {
2733
- return BigDecimal_new(argc, argv, klass);
2895
+ ENTER(1);
2896
+ char const *c_str;
2897
+ Real *pv;
2898
+
2899
+ c_str = StringValueCStr(str);
2900
+ GUARD_OBJ(pv, VpAlloc(0, c_str, 0, 1));
2901
+ pv->obj = TypedData_Wrap_Struct(klass, &BigDecimal_data_type, pv);
2902
+ RB_OBJ_FREEZE(pv->obj);
2903
+ return pv->obj;
2734
2904
  }
2735
2905
 
2736
2906
  /* call-seq:
@@ -2749,7 +2919,7 @@ static VALUE
2749
2919
  BigDecimal_limit(int argc, VALUE *argv, VALUE self)
2750
2920
  {
2751
2921
  VALUE nFig;
2752
- VALUE nCur = INT2NUM(VpGetPrecLimit());
2922
+ VALUE nCur = SIZET2NUM(VpGetPrecLimit());
2753
2923
 
2754
2924
  if (rb_scan_args(argc, argv, "01", &nFig) == 1) {
2755
2925
  int nf;
@@ -2914,7 +3084,7 @@ BigMath_s_exp(VALUE klass, VALUE x, VALUE vprec)
2914
3084
  infinite = isinf(flo);
2915
3085
  nan = isnan(flo);
2916
3086
  if (!infinite && !nan) {
2917
- vx = GetVpValueWithPrec(x, DBL_DIG+1, 0);
3087
+ vx = GetVpValueWithPrec(x, DBLE_FIG, 0);
2918
3088
  }
2919
3089
  break;
2920
3090
 
@@ -2952,6 +3122,10 @@ BigMath_s_exp(VALUE klass, VALUE x, VALUE vprec)
2952
3122
  n = prec + rmpd_double_figures();
2953
3123
  negative = BIGDECIMAL_NEGATIVE_P(vx);
2954
3124
  if (negative) {
3125
+ VALUE x_zero = INT2NUM(1);
3126
+ VALUE x_copy = f_BigDecimal(1, &x_zero, klass);
3127
+ x = BigDecimal_initialize_copy(x_copy, x);
3128
+ vx = DATA_PTR(x);
2955
3129
  VpSetSign(vx, 1);
2956
3130
  }
2957
3131
 
@@ -3063,7 +3237,7 @@ get_vp_value:
3063
3237
  infinite = isinf(flo);
3064
3238
  nan = isnan(flo);
3065
3239
  if (!zero && !negative && !infinite && !nan) {
3066
- vx = GetVpValueWithPrec(x, DBL_DIG+1, 1);
3240
+ vx = GetVpValueWithPrec(x, DBLE_FIG, 1);
3067
3241
  }
3068
3242
  break;
3069
3243
 
@@ -3153,20 +3327,6 @@ get_vp_value:
3153
3327
  return y;
3154
3328
  }
3155
3329
 
3156
- VALUE
3157
- rmpd_util_str_to_d(VALUE str)
3158
- {
3159
- ENTER(1);
3160
- char const *c_str;
3161
- Real *pv;
3162
-
3163
- c_str = StringValueCStr(str);
3164
- GUARD_OBJ(pv, VpAlloc(0, c_str, 0, 1));
3165
- pv->obj = TypedData_Wrap_Struct(rb_cBigDecimal, &BigDecimal_data_type, pv);
3166
- RB_OBJ_FREEZE(pv->obj);
3167
- return pv->obj;
3168
- }
3169
-
3170
3330
  /* Document-class: BigDecimal
3171
3331
  * BigDecimal provides arbitrary-precision floating point decimal arithmetic.
3172
3332
  *
@@ -3295,6 +3455,9 @@ rmpd_util_str_to_d(VALUE str)
3295
3455
  void
3296
3456
  Init_bigdecimal(void)
3297
3457
  {
3458
+ #ifdef HAVE_RB_EXT_RACTOR_SAFE
3459
+ rb_ext_ractor_safe(true);
3460
+ #endif
3298
3461
  VALUE arg;
3299
3462
 
3300
3463
  id_BigDecimal_exception_mode = rb_intern_const("BigDecimal.exception_mode");
@@ -3311,8 +3474,9 @@ Init_bigdecimal(void)
3311
3474
  rb_define_global_function("BigDecimal", f_BigDecimal, -1);
3312
3475
 
3313
3476
  /* Class methods */
3314
- rb_undef_method(CLASS_OF(rb_cBigDecimal), "allocate");
3315
- rb_define_singleton_method(rb_cBigDecimal, "new", BigDecimal_s_new, -1);
3477
+ rb_undef_alloc_func(rb_cBigDecimal);
3478
+ rb_undef_method(CLASS_OF(rb_cBigDecimal), "new");
3479
+ rb_define_singleton_method(rb_cBigDecimal, "interpret_loosely", BigDecimal_s_interpret_loosely, 1);
3316
3480
  rb_define_singleton_method(rb_cBigDecimal, "mode", BigDecimal_mode, -1);
3317
3481
  rb_define_singleton_method(rb_cBigDecimal, "limit", BigDecimal_limit, -1);
3318
3482
  rb_define_singleton_method(rb_cBigDecimal, "double_fig", BigDecimal_double_fig, 0);
@@ -3443,8 +3607,9 @@ Init_bigdecimal(void)
3443
3607
 
3444
3608
 
3445
3609
  /* instance methods */
3446
- rb_define_method(rb_cBigDecimal, "initialize_copy", BigDecimal_initialize_copy, 1);
3447
3610
  rb_define_method(rb_cBigDecimal, "precs", BigDecimal_prec, 0);
3611
+ rb_define_method(rb_cBigDecimal, "precision", BigDecimal_precision, 0);
3612
+ rb_define_method(rb_cBigDecimal, "n_significant_digits", BigDecimal_n_significant_digits, 0);
3448
3613
 
3449
3614
  rb_define_method(rb_cBigDecimal, "add", BigDecimal_add2, 2);
3450
3615
  rb_define_method(rb_cBigDecimal, "sub", BigDecimal_sub2, 2);
@@ -3561,6 +3726,9 @@ static void VpFormatSt(char *psz, size_t fFmt);
3561
3726
  static int VpRdup(Real *m, size_t ind_m);
3562
3727
 
3563
3728
  #ifdef BIGDECIMAL_DEBUG
3729
+ # ifdef HAVE_RB_EXT_RACTOR_SAFE
3730
+ # error Need to make rewiting gnAlloc atomic
3731
+ # endif
3564
3732
  static int gnAlloc = 0; /* Memory allocation counter */
3565
3733
  #endif /* BIGDECIMAL_DEBUG */
3566
3734
 
@@ -3967,7 +4135,7 @@ VpNumOfChars(Real *vp,const char *pszFmt)
3967
4135
  * by one BDIGIT word in the computer used.
3968
4136
  *
3969
4137
  * [Returns]
3970
- * 1+DBL_DIG ... OK
4138
+ * DBLE_FIG ... OK
3971
4139
  */
3972
4140
  VP_EXPORT size_t
3973
4141
  VpInit(BDIGIT BaseVal)
@@ -4137,7 +4305,7 @@ VpAlloc(size_t mx, const char *szVal, int strict_p, int exc)
4137
4305
  /* at least mx digits. */
4138
4306
  /* szVal==NULL ==> allocate zero value. */
4139
4307
  vp = VpAllocReal(mx);
4140
- /* xmalloc() alway returns(or throw interruption) */
4308
+ /* xmalloc() always returns(or throw interruption) */
4141
4309
  vp->MaxPrec = mx; /* set max precision */
4142
4310
  VpSetZero(vp, 1); /* initialize vp to zero. */
4143
4311
  return vp;
@@ -4294,7 +4462,7 @@ VpAlloc(size_t mx, const char *szVal, int strict_p, int exc)
4294
4462
 
4295
4463
  psz[i] = '\0';
4296
4464
 
4297
- if (((ni == 0 || dot_seen) && nf == 0) || (exp_seen && ne == 0)) {
4465
+ if (strict_p && (((ni == 0 || dot_seen) && nf == 0) || (exp_seen && ne == 0))) {
4298
4466
  VALUE str;
4299
4467
  invalid_value:
4300
4468
  if (!strict_p) {
@@ -4313,7 +4481,7 @@ VpAlloc(size_t mx, const char *szVal, int strict_p, int exc)
4313
4481
  nalloc = Max(nalloc, mx);
4314
4482
  mx = nalloc;
4315
4483
  vp = VpAllocReal(mx);
4316
- /* xmalloc() alway returns(or throw interruption) */
4484
+ /* xmalloc() always returns(or throw interruption) */
4317
4485
  vp->MaxPrec = mx; /* set max precision */
4318
4486
  VpSetZero(vp, sign);
4319
4487
  VpCtoV(vp, psz, ni, psz + ipf, nf, psz + ipe, ne);
@@ -159,6 +159,10 @@ rb_sym2str(VALUE sym)
159
159
  # define vabs llabs
160
160
  #endif
161
161
 
162
+ #if !defined(HAVE_RB_CATEGORY_WARN) || !defined(HAVE_CONST_RB_WARN_CATEGORY_DEPRECATED)
163
+ # define rb_category_warn(category, ...) rb_warn(__VA_ARGS__)
164
+ #endif
165
+
162
166
  extern VALUE rb_cBigDecimal;
163
167
 
164
168
  #if 0 || SIZEOF_BDIGITS >= 16
@@ -1,6 +1,21 @@
1
1
  # frozen_string_literal: false
2
2
  require 'mkmf'
3
3
 
4
+ def check_bigdecimal_version(gemspec_path)
5
+ message "checking RUBY_BIGDECIMAL_VERSION... "
6
+
7
+ bigdecimal_version =
8
+ IO.readlines(gemspec_path)
9
+ .grep(/\Abigdecimal_version\s+=\s+/)[0][/\'([^\']+)\'/, 1]
10
+
11
+ version_components = bigdecimal_version.split('.')
12
+ bigdecimal_version = version_components[0, 3].join('.')
13
+ bigdecimal_version << "-#{version_components[3]}" if version_components[3]
14
+ $defs << %Q[-DRUBY_BIGDECIMAL_VERSION=\\"#{bigdecimal_version}\\"]
15
+
16
+ message "#{bigdecimal_version}\n"
17
+ end
18
+
4
19
  gemspec_name = gemspec_path = nil
5
20
  unless ['', '../../'].any? {|dir|
6
21
  gemspec_name = "#{dir}bigdecimal.gemspec"
@@ -11,11 +26,7 @@ unless ['', '../../'].any? {|dir|
11
26
  abort
12
27
  end
13
28
 
14
- bigdecimal_version =
15
- IO.readlines(gemspec_path)
16
- .grep(/\Abigdecimal_version\s+=\s+/)[0][/\'([\d\.]+)\'/, 1]
17
-
18
- $defs << %Q[-DRUBY_BIGDECIMAL_VERSION=\\"#{bigdecimal_version}\\"]
29
+ check_bigdecimal_version(gemspec_path)
19
30
 
20
31
  have_func("labs", "stdlib.h")
21
32
  have_func("llabs", "stdlib.h")
@@ -25,8 +36,14 @@ have_func("isfinite", "math.h")
25
36
  have_type("struct RRational", "ruby.h")
26
37
  have_func("rb_rational_num", "ruby.h")
27
38
  have_func("rb_rational_den", "ruby.h")
39
+ have_type("struct RComplex", "ruby.h")
40
+ have_func("rb_complex_real", "ruby.h")
41
+ have_func("rb_complex_imag", "ruby.h")
28
42
  have_func("rb_array_const_ptr", "ruby.h")
29
43
  have_func("rb_sym2str", "ruby.h")
44
+ have_func("rb_opts_exception_p", "ruby.h")
45
+ have_func("rb_category_warn", "ruby.h")
46
+ have_const("RB_WARN_CATEGORY_DEPRECATED", "ruby.h")
30
47
 
31
48
  if File.file?(File.expand_path('../lib/bigdecimal.rb', __FILE__))
32
49
  bigdecimal_rb = "$(srcdir)/lib/bigdecimal.rb"
@@ -1,22 +1 @@
1
- begin
2
- require "#{RUBY_VERSION[/\d+\.\d+/]}/bigdecimal.so"
3
- rescue LoadError
4
- require 'bigdecimal.so'
5
- end
6
-
7
- class BigDecimal
8
- module Deprecation
9
- def new(*args, **kwargs)
10
- warn "BigDecimal.new is deprecated; use BigDecimal() method instead.", uplevel: 1
11
- super
12
- end
13
- end
14
-
15
- class << self
16
- prepend Deprecation
17
-
18
- def inherited(subclass)
19
- warn "subclassing BigDecimal will be disallowed after bigdecimal version 2.0", uplevel: 1
20
- end
21
- end
22
- end
1
+ require 'bigdecimal.so'
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: false
2
- #
2
+
3
+ require 'bigdecimal'
4
+
3
5
  # require 'bigdecimal/jacobian'
4
6
  #
5
7
  # Provides methods to compute the Jacobian matrix of a set of equations at a
@@ -21,9 +23,6 @@
21
23
  #
22
24
  # fx is f.values(x).
23
25
  #
24
-
25
- require 'bigdecimal'
26
-
27
26
  module Jacobian
28
27
  module_function
29
28
 
@@ -6,7 +6,6 @@
6
6
  #++
7
7
 
8
8
  require 'bigdecimal'
9
- require 'bigdecimal/util.so'
10
9
 
11
10
  class Integer < Numeric
12
11
  # call-seq:
@@ -44,7 +43,7 @@ class Float < Numeric
44
43
  #
45
44
  # See also BigDecimal::new.
46
45
  #
47
- def to_d(precision=Float::DIG)
46
+ def to_d(precision=Float::DIG+1)
48
47
  BigDecimal(self, precision)
49
48
  end
50
49
  end
@@ -66,6 +65,9 @@ class String
66
65
  #
67
66
  # See also BigDecimal::new.
68
67
  #
68
+ def to_d
69
+ BigDecimal.interpret_loosely(self)
70
+ end
69
71
  end
70
72
 
71
73
 
@@ -129,6 +131,39 @@ class Rational < Numeric
129
131
  end
130
132
 
131
133
 
134
+ class Complex < Numeric
135
+ # call-seq:
136
+ # cmp.to_d -> bigdecimal
137
+ # cmp.to_d(precision) -> bigdecimal
138
+ #
139
+ # Returns the value as a BigDecimal.
140
+ #
141
+ # The +precision+ parameter is required for a rational complex number.
142
+ # This parameter is used to determine the number of significant digits
143
+ # for the result.
144
+ #
145
+ # require 'bigdecimal'
146
+ # require 'bigdecimal/util'
147
+ #
148
+ # Complex(0.1234567, 0).to_d(4) # => 0.1235e0
149
+ # Complex(Rational(22, 7), 0).to_d(3) # => 0.314e1
150
+ #
151
+ # See also BigDecimal::new.
152
+ #
153
+ def to_d(*args)
154
+ BigDecimal(self) unless self.imag.zero? # to raise eerror
155
+
156
+ if args.length == 0
157
+ case self.real
158
+ when Rational
159
+ BigDecimal(self.real) # to raise error
160
+ end
161
+ end
162
+ self.real.to_d(*args)
163
+ end
164
+ end
165
+
166
+
132
167
  class NilClass
133
168
  # call-seq:
134
169
  # nil.to_d -> bigdecimal
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: 1.4.3.pre.20190110
4
+ version: 3.0.0
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: 2019-01-09 00:00:00.000000000 Z
13
+ date: 2020-12-19 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: '10.0'
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: '10.0'
28
+ version: 12.3.3
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rake-compiler
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -40,20 +40,6 @@ dependencies:
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0.9'
43
- - !ruby/object:Gem::Dependency
44
- name: rake-compiler-dock
45
- requirement: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- version: 0.6.1
50
- type: :development
51
- prerelease: false
52
- version_requirements: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: 0.6.1
57
43
  - !ruby/object:Gem::Dependency
58
44
  name: minitest
59
45
  requirement: !ruby/object:Gem::Requirement
@@ -89,17 +75,12 @@ email:
89
75
  executables: []
90
76
  extensions:
91
77
  - ext/bigdecimal/extconf.rb
92
- - ext/bigdecimal/util/extconf.rb
93
78
  extra_rdoc_files: []
94
79
  files:
95
80
  - bigdecimal.gemspec
96
81
  - ext/bigdecimal/bigdecimal.c
97
- - ext/bigdecimal/bigdecimal.def
98
82
  - ext/bigdecimal/bigdecimal.h
99
- - ext/bigdecimal/depend
100
83
  - ext/bigdecimal/extconf.rb
101
- - ext/bigdecimal/util/extconf.rb
102
- - ext/bigdecimal/util/util.c
103
84
  - lib/bigdecimal.rb
104
85
  - lib/bigdecimal/jacobian.rb
105
86
  - lib/bigdecimal/ludcmp.rb
@@ -111,7 +92,7 @@ files:
111
92
  - sample/pi.rb
112
93
  homepage: https://github.com/ruby/bigdecimal
113
94
  licenses:
114
- - ruby
95
+ - Ruby
115
96
  metadata: {}
116
97
  post_install_message:
117
98
  rdoc_options: []
@@ -121,14 +102,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
121
102
  requirements:
122
103
  - - ">="
123
104
  - !ruby/object:Gem::Version
124
- version: 2.3.0
105
+ version: 2.4.0
125
106
  required_rubygems_version: !ruby/object:Gem::Requirement
126
107
  requirements:
127
- - - ">"
108
+ - - ">="
128
109
  - !ruby/object:Gem::Version
129
- version: 1.3.1
110
+ version: '0'
130
111
  requirements: []
131
- rubygems_version: 3.0.1
112
+ rubygems_version: 3.2.2
132
113
  signing_key:
133
114
  specification_version: 4
134
115
  summary: Arbitrary-precision decimal floating-point number library.
@@ -1,3 +0,0 @@
1
- EXPORTS
2
- rmpd_util_str_to_d
3
- Init_bigdecimal
@@ -1,16 +0,0 @@
1
- extconf.h: $(srcdir)/$(GEMSPEC)
2
- Makefile: $(BIGDECIMAL_RB)
3
-
4
- # AUTOGENERATED DEPENDENCIES START
5
- bigdecimal.o: $(RUBY_EXTCONF_H)
6
- bigdecimal.o: $(arch_hdrdir)/ruby/config.h
7
- bigdecimal.o: $(hdrdir)/ruby/defines.h
8
- bigdecimal.o: $(hdrdir)/ruby/intern.h
9
- bigdecimal.o: $(hdrdir)/ruby/missing.h
10
- bigdecimal.o: $(hdrdir)/ruby/ruby.h
11
- bigdecimal.o: $(hdrdir)/ruby/st.h
12
- bigdecimal.o: $(hdrdir)/ruby/subst.h
13
- bigdecimal.o: $(hdrdir)/ruby/util.h
14
- bigdecimal.o: bigdecimal.c
15
- bigdecimal.o: bigdecimal.h
16
- # AUTOGENERATED DEPENDENCIES END
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: false
2
- require 'mkmf'
3
-
4
- checking_for(checking_message("Windows")) do
5
- case RUBY_PLATFORM
6
- when /cygwin|mingw/
7
- if ARGV.include?('-rdevkit') # check `rake -rdevkit compile` case
8
- base_dir = File.expand_path('../../../..', __FILE__)
9
- build_dir = File.join(base_dir, "tmp", RUBY_PLATFORM, "bigdecimal", RUBY_VERSION, "")
10
- else
11
- build_dir = "$(TARGET_SO_DIR)../"
12
- end
13
- $libs << " #{build_dir}bigdecimal.so"
14
- true
15
- when /mswin/
16
- $DLDFLAGS << " -libpath:.."
17
- $libs << " bigdecimal-$(arch).lib"
18
- true
19
- else
20
- false
21
- end
22
- end
23
-
24
- create_makefile('bigdecimal/util')
@@ -1,9 +0,0 @@
1
- #include "ruby.h"
2
-
3
- RUBY_EXTERN VALUE rmpd_util_str_to_d(VALUE str);
4
-
5
- void
6
- Init_util(void)
7
- {
8
- rb_define_method(rb_cString, "to_d", rmpd_util_str_to_d, 0);
9
- }