bigdecimal 1.4.3.pre.20190110 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
- }