bigdecimal 1.3.1 → 1.3.2

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
  SHA1:
3
- metadata.gz: 8124f63d9fe1ebd037238255c97c7d690fb5e0fd
4
- data.tar.gz: 1ee22f5a1d8a3508e4b385adf1a0bf9ef19d3a35
3
+ metadata.gz: e74979e928a1faa6ecca707c8d405be6e4c0b6d5
4
+ data.tar.gz: f8fb2859efdaa6a9ff49ae0d9d0cc2471ff2f89e
5
5
  SHA512:
6
- metadata.gz: 0e6fbd671a8405a389112d7301a6b42bc09ae47da641b9d420be0ab4d177ca699e6bd0b0dbccdf87e0dcf3484cfdd5eced34590252508c857db742fd615b6982
7
- data.tar.gz: 725be9a7d1947d86a08555bf33546806b534666dd7aec3fe529817475247ecae1a50aeeb7dad4a3dc5e8fe1f06379d16ee99daac9d1108e8e9426194eca6a2be
6
+ metadata.gz: 585f1a41327c0265d6dbe79ea5934d92381d75c07f3305fe284d226f7e3315d15db6003441356b2e374ef2cd6909f2d5ce64df23604e1763f1d1340690ccc739
7
+ data.tar.gz: ccf79300c8b45bd8bed8f240f72ee6aa43c14bec8944e1b6871fdba9639d40b53da6a4a31072f05cee66703f57102946fec9e7cfb161d8ea10bb200e185c166f
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- _VERSION = '1.3.1'
2
+ _VERSION = '1.3.2'
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "bigdecimal"
@@ -33,4 +33,5 @@ Gem::Specification.new do |s|
33
33
  s.add_development_dependency "rake", "~> 10.0"
34
34
  s.add_development_dependency "rake-compiler", "~> 0.9"
35
35
  s.add_development_dependency "minitest", "~> 4.7.5"
36
+ s.add_development_dependency "pry"
36
37
  end
@@ -231,6 +231,7 @@ static inline VALUE BigDecimal_div2(VALUE, VALUE, VALUE);
231
231
  static Real*
232
232
  GetVpValueWithPrec(VALUE v, long prec, int must)
233
233
  {
234
+ ENTER(1);
234
235
  Real *pv;
235
236
  VALUE num, bg;
236
237
  char szD[128];
@@ -295,6 +296,7 @@ again:
295
296
 
296
297
  case T_BIGNUM:
297
298
  bg = rb_big2str(v, 10);
299
+ PUSH(bg);
298
300
  return VpCreateRbObject(strlen(RSTRING_PTR(bg)) + VpBaseFig() + 1,
299
301
  RSTRING_PTR(bg));
300
302
  default:
@@ -1318,25 +1320,14 @@ BigDecimal_divide(Real **c, Real **res, Real **div, VALUE self, VALUE r)
1318
1320
  return Qnil;
1319
1321
  }
1320
1322
 
1321
- /* call-seq:
1322
- * div(value, digits)
1323
- * quo(value)
1324
- *
1325
- * Divide by the specified value.
1326
- *
1327
- * e.g.
1328
- * c = a.div(b,n)
1329
- *
1330
- * digits:: If specified and less than the number of significant digits of the
1331
- * result, the result is rounded to that number of digits, according
1332
- * to BigDecimal.mode.
1333
- *
1334
- * If digits is 0, the result is the same as the / operator. If not, the
1335
- * result is an integer BigDecimal, by analogy with Float#div.
1336
- *
1337
- * The alias quo is provided since <code>div(value, 0)</code> is the same as
1338
- * computing the quotient; see BigDecimal#divmod.
1339
- */
1323
+ /* call-seq:
1324
+ * a / b -> bigdecimal
1325
+ * quo(value) -> bigdecimal
1326
+ *
1327
+ * Divide by the specified value.
1328
+ *
1329
+ * See BigDecimal#div.
1330
+ */
1340
1331
  static VALUE
1341
1332
  BigDecimal_div(VALUE self, VALUE r)
1342
1333
  /* For c = self/r: with round operation */
@@ -1602,6 +1593,37 @@ BigDecimal_div2(VALUE self, VALUE b, VALUE n)
1602
1593
  }
1603
1594
  }
1604
1595
 
1596
+ /*
1597
+ * Document-method: BigDecimal#div
1598
+ *
1599
+ * call-seq:
1600
+ * div(value, digits) -> bigdecimal or integer
1601
+ *
1602
+ * Divide by the specified value.
1603
+ *
1604
+ * digits:: If specified and less than the number of significant digits of the
1605
+ * result, the result is rounded to that number of digits, according
1606
+ * to BigDecimal.mode.
1607
+ *
1608
+ * If digits is 0, the result is the same as for the / operator
1609
+ * or #quo.
1610
+ *
1611
+ * If digits is not specified, the result is an integer,
1612
+ * by analogy with Float#div; see also BigDecimal#divmod.
1613
+ *
1614
+ * Examples:
1615
+ *
1616
+ * a = BigDecimal("4")
1617
+ * b = BigDecimal("3")
1618
+ *
1619
+ * a.div(b, 3) # => 0.133e1
1620
+ *
1621
+ * a.div(b, 0) # => 0.1333333333333333333e1
1622
+ * a / b # => 0.1333333333333333333e1
1623
+ * a.quo(b) # => 0.1333333333333333333e1
1624
+ *
1625
+ * a.div(b) # => 1
1626
+ */
1605
1627
  static VALUE
1606
1628
  BigDecimal_div3(int argc, VALUE *argv, VALUE self)
1607
1629
  {
@@ -3193,6 +3215,19 @@ get_vp_value:
3193
3215
  * Note also that in mathematics, there is no particular concept of negative
3194
3216
  * or positive zero; true mathematical zero has no sign.
3195
3217
  *
3218
+ * == bigdecimal/util
3219
+ *
3220
+ * When you require +bigdecimal/util+, the #to_d method will be
3221
+ * available on BigDecimal and the native Integer, Float, Rational,
3222
+ * and String classes:
3223
+ *
3224
+ * require 'bigdecimal/util'
3225
+ *
3226
+ * 42.to_d # => 0.42e2
3227
+ * 0.5.to_d # => 0.5e0
3228
+ * (2/3r).to_d(3) # => 0.667e0
3229
+ * "0.5".to_d # => 0.5e0
3230
+ *
3196
3231
  * == License
3197
3232
  *
3198
3233
  * Copyright (C) 2002 by Shigeo Kobayashi <shigeo@tinyforest.gr.jp>.
@@ -9,6 +9,8 @@
9
9
  #ifndef RUBY_BIG_DECIMAL_H
10
10
  #define RUBY_BIG_DECIMAL_H 1
11
11
 
12
+ #define RUBY_NO_OLD_COMPATIBILITY
13
+
12
14
  #include "ruby/ruby.h"
13
15
  #include <float.h>
14
16
 
@@ -15,12 +15,3 @@ have_func("rb_array_const_ptr", "ruby.h")
15
15
  have_func("rb_sym2str", "ruby.h")
16
16
 
17
17
  create_makefile('bigdecimal')
18
-
19
- # Add additional dependencies
20
- open('Makefile', 'a') do |io|
21
- if RUBY_VERSION >= '2.4'
22
- io.puts <<-MAKEFILE
23
- bigdecimal.o: $(hdrdir)/ruby/backward.h
24
- MAKEFILE
25
- end
26
- end
@@ -1,66 +1,68 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
+ #--
3
4
  # bigdecimal/util extends various native classes to provide the #to_d method,
4
5
  # and provides BigDecimal#to_d and BigDecimal#to_digits.
6
+ #++
5
7
 
6
8
 
7
- # bigdecimal/util extends the native Integer class to provide the #to_d method.
8
- #
9
- # When you require 'bigdecimal/util' in your application, this method will
10
- # be available on Integer objects.
11
9
  class Integer < Numeric
12
10
  # call-seq:
13
11
  # int.to_d -> bigdecimal
14
12
  #
15
- # Convert +int+ to a BigDecimal and return it.
13
+ # Returns the value of +int+ as a BigDecimal.
16
14
  #
17
15
  # require 'bigdecimal'
18
16
  # require 'bigdecimal/util'
19
17
  #
20
- # 42.to_d
21
- # # => 0.42e2
18
+ # 42.to_d # => 0.42e2
19
+ #
20
+ # See also BigDecimal::new.
22
21
  #
23
22
  def to_d
24
23
  BigDecimal(self)
25
24
  end
26
25
  end
27
26
 
28
- # bigdecimal/util extends the native Float class to provide the #to_d method.
29
- #
30
- # When you require 'bigdecimal/util' in your application, this method will be
31
- # available on Float objects.
27
+
32
28
  class Float < Numeric
33
29
  # call-seq:
34
- # flt.to_d -> bigdecimal
30
+ # float.to_d -> bigdecimal
31
+ # float.to_d(precision) -> bigdecimal
35
32
  #
36
- # Convert +flt+ to a BigDecimal and return it.
33
+ # Returns the value of +float+ as a BigDecimal.
34
+ # The +precision+ parameter is used to determine the number of
35
+ # significant digits for the result (the default is Float::DIG).
37
36
  #
38
37
  # require 'bigdecimal'
39
38
  # require 'bigdecimal/util'
40
39
  #
41
- # 0.5.to_d
42
- # # => 0.5e0
40
+ # 0.5.to_d # => 0.5e0
41
+ # 1.234.to_d(2) # => 0.12e1
42
+ #
43
+ # See also BigDecimal::new.
43
44
  #
44
45
  def to_d(precision=nil)
45
46
  BigDecimal(self, precision || Float::DIG)
46
47
  end
47
48
  end
48
49
 
49
- # bigdecimal/util extends the native String class to provide the #to_d method.
50
- #
51
- # When you require 'bigdecimal/util' in your application, this method will be
52
- # available on String objects.
50
+
53
51
  class String
54
52
  # call-seq:
55
- # string.to_d -> bigdecimal
53
+ # str.to_d -> bigdecimal
56
54
  #
57
- # Convert +string+ to a BigDecimal and return it.
55
+ # Returns the result of interpreting leading characters in +str+
56
+ # as a BigDecimal.
58
57
  #
59
58
  # require 'bigdecimal'
60
59
  # require 'bigdecimal/util'
61
60
  #
62
- # "0.5".to_d
63
- # # => 0.5e0
61
+ # "0.5".to_d # => 0.5e0
62
+ # "123.45e1".to_d # => 0.12345e4
63
+ # "45.67 degrees".to_d # => 0.4567e2
64
+ #
65
+ # See also BigDecimal::new.
64
66
  #
65
67
  def to_d
66
68
  begin
@@ -71,11 +73,7 @@ class String
71
73
  end
72
74
  end
73
75
 
74
- # bigdecimal/util extends the BigDecimal class to provide the #to_digits and
75
- # #to_d methods.
76
- #
77
- # When you require 'bigdecimal/util' in your application, these methods will be
78
- # available on BigDecimal objects.
76
+
79
77
  class BigDecimal < Numeric
80
78
  # call-seq:
81
79
  # a.to_digits -> string
@@ -83,12 +81,11 @@ class BigDecimal < Numeric
83
81
  # Converts a BigDecimal to a String of the form "nnnnnn.mmm".
84
82
  # This method is deprecated; use BigDecimal#to_s("F") instead.
85
83
  #
86
- # require 'bigdecimal'
87
84
  # require 'bigdecimal/util'
88
85
  #
89
86
  # d = BigDecimal.new("3.14")
90
- # d.to_digits
91
- # # => "3.14"
87
+ # d.to_digits # => "3.14"
88
+ #
92
89
  def to_digits
93
90
  if self.nan? || self.infinite? || self.zero?
94
91
  self.to_s
@@ -103,35 +100,35 @@ class BigDecimal < Numeric
103
100
  # a.to_d -> bigdecimal
104
101
  #
105
102
  # Returns self.
103
+ #
104
+ # require 'bigdecimal/util'
105
+ #
106
+ # d = BigDecimal.new("3.14")
107
+ # d.to_d # => 0.314e1
108
+ #
106
109
  def to_d
107
110
  self
108
111
  end
109
112
  end
110
113
 
111
- # bigdecimal/util extends the native Rational class to provide the #to_d method.
112
- #
113
- # When you require 'bigdecimal/util' in your application, this method will be
114
- # available on Rational objects.
114
+
115
115
  class Rational < Numeric
116
116
  # call-seq:
117
- # r.to_d(precision) -> bigdecimal
117
+ # rat.to_d(precision) -> bigdecimal
118
118
  #
119
- # Converts a Rational to a BigDecimal.
119
+ # Returns the value as a BigDecimal.
120
120
  #
121
- # The required +precision+ parameter is used to determine the amount of
122
- # significant digits for the result. See BigDecimal#div for more information,
123
- # as it is used along with the #denominator and the +precision+ for
124
- # parameters.
121
+ # The required +precision+ parameter is used to determine the number of
122
+ # significant digits for the result.
123
+ #
124
+ # require 'bigdecimal'
125
+ # require 'bigdecimal/util'
126
+ #
127
+ # Rational(22, 7).to_d(3) # => 0.314e1
128
+ #
129
+ # See also BigDecimal::new.
125
130
  #
126
- # r = (22/7.0).to_r
127
- # # => (7077085128725065/2251799813685248)
128
- # r.to_d(3)
129
- # # => 0.314e1
130
131
  def to_d(precision)
131
- if precision <= 0
132
- raise ArgumentError, "negative precision"
133
- end
134
- num = self.numerator
135
- BigDecimal(num).div(self.denominator, precision)
132
+ BigDecimal(self, precision)
136
133
  end
137
134
  end
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.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenta Murata
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-02-10 00:00:00.000000000 Z
13
+ date: 2017-03-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -54,6 +54,20 @@ dependencies:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
56
  version: 4.7.5
57
+ - !ruby/object:Gem::Dependency
58
+ name: pry
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
57
71
  description: This library provides arbitrary-precision decimal floating-point number
58
72
  class.
59
73
  email: