bigdecimal 1.3.5 → 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.
@@ -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
@@ -308,7 +312,7 @@ VP_EXPORT size_t VpInit(BDIGIT BaseVal);
308
312
  VP_EXPORT void *VpMemAlloc(size_t mb);
309
313
  VP_EXPORT void *VpMemRealloc(void *ptr, size_t mb);
310
314
  VP_EXPORT void VpFree(Real *pv);
311
- VP_EXPORT Real *VpAlloc(size_t mx, const char *szVal);
315
+ VP_EXPORT Real *VpAlloc(size_t mx, const char *szVal, int strict_p, int exc);
312
316
  VP_EXPORT size_t VpAsgn(Real *c, Real *a, int isw);
313
317
  VP_EXPORT size_t VpAddSub(Real *c,Real *a,Real *b,int operation);
314
318
  VP_EXPORT size_t VpMult(Real *c,Real *a,Real *b);
@@ -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,9 +36,22 @@ 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")
47
+
48
+ if File.file?(File.expand_path('../lib/bigdecimal.rb', __FILE__))
49
+ bigdecimal_rb = "$(srcdir)/lib/bigdecimal.rb"
50
+ else
51
+ bigdecimal_rb = "$(srcdir)/../../lib/bigdecimal.rb"
52
+ end
30
53
 
31
54
  create_makefile('bigdecimal') {|mf|
32
- mf << "\nall:\n\nextconf.h: $(srcdir)/#{gemspec_name}\n"
55
+ mf << "GEMSPEC = #{gemspec_name}\n"
56
+ mf << "BIGDECIMAL_RB = #{bigdecimal_rb}\n"
33
57
  }
data/lib/bigdecimal.rb ADDED
@@ -0,0 +1 @@
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
@@ -5,6 +5,7 @@
5
5
  # and provides BigDecimal#to_d and BigDecimal#to_digits.
6
6
  #++
7
7
 
8
+ require 'bigdecimal'
8
9
 
9
10
  class Integer < Numeric
10
11
  # call-seq:
@@ -42,8 +43,8 @@ class Float < Numeric
42
43
  #
43
44
  # See also BigDecimal::new.
44
45
  #
45
- def to_d(precision=nil)
46
- BigDecimal(self, precision || Float::DIG)
46
+ def to_d(precision=Float::DIG+1)
47
+ BigDecimal(self, precision)
47
48
  end
48
49
  end
49
50
 
@@ -65,11 +66,7 @@ class String
65
66
  # See also BigDecimal::new.
66
67
  #
67
68
  def to_d
68
- begin
69
- BigDecimal(self)
70
- rescue ArgumentError
71
- BigDecimal(0)
72
- end
69
+ BigDecimal.interpret_loosely(self)
73
70
  end
74
71
  end
75
72
 
@@ -134,6 +131,39 @@ class Rational < Numeric
134
131
  end
135
132
 
136
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
+
137
167
  class NilClass
138
168
  # call-seq:
139
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.3.5
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: 2018-06-15 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
@@ -94,8 +80,8 @@ files:
94
80
  - bigdecimal.gemspec
95
81
  - ext/bigdecimal/bigdecimal.c
96
82
  - ext/bigdecimal/bigdecimal.h
97
- - ext/bigdecimal/depend
98
83
  - ext/bigdecimal/extconf.rb
84
+ - lib/bigdecimal.rb
99
85
  - lib/bigdecimal/jacobian.rb
100
86
  - lib/bigdecimal/ludcmp.rb
101
87
  - lib/bigdecimal/math.rb
@@ -106,7 +92,7 @@ files:
106
92
  - sample/pi.rb
107
93
  homepage: https://github.com/ruby/bigdecimal
108
94
  licenses:
109
- - ruby
95
+ - Ruby
110
96
  metadata: {}
111
97
  post_install_message:
112
98
  rdoc_options: []
@@ -116,15 +102,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
102
  requirements:
117
103
  - - ">="
118
104
  - !ruby/object:Gem::Version
119
- version: '0'
105
+ version: 2.4.0
120
106
  required_rubygems_version: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - ">="
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0'
125
111
  requirements: []
126
- rubyforge_project:
127
- rubygems_version: 2.7.6
112
+ rubygems_version: 3.2.2
128
113
  signing_key:
129
114
  specification_version: 4
130
115
  summary: Arbitrary-precision decimal floating-point number library.
@@ -1,13 +0,0 @@
1
- # AUTOGENERATED DEPENDENCIES START
2
- bigdecimal.o: $(RUBY_EXTCONF_H)
3
- bigdecimal.o: $(arch_hdrdir)/ruby/config.h
4
- bigdecimal.o: $(hdrdir)/ruby/defines.h
5
- bigdecimal.o: $(hdrdir)/ruby/intern.h
6
- bigdecimal.o: $(hdrdir)/ruby/missing.h
7
- bigdecimal.o: $(hdrdir)/ruby/ruby.h
8
- bigdecimal.o: $(hdrdir)/ruby/st.h
9
- bigdecimal.o: $(hdrdir)/ruby/subst.h
10
- bigdecimal.o: $(hdrdir)/ruby/util.h
11
- bigdecimal.o: bigdecimal.c
12
- bigdecimal.o: bigdecimal.h
13
- # AUTOGENERATED DEPENDENCIES END