rubysl-bigdecimal 1.0.0 → 2.0.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 +4 -4
- data/.travis.yml +3 -2
- data/README.md +48 -17
- data/{lib/bigdecimal/bigdecimal_en.html → bigdecimal_en.html} +54 -58
- data/{lib/bigdecimal/bigdecimal_ja.html → bigdecimal_ja.html} +6 -6
- data/ext/rubysl/bigdecimal/bigdecimal.c +2234 -1120
- data/ext/rubysl/bigdecimal/bigdecimal.h +114 -57
- data/lib/bigdecimal/jacobian.rb +13 -11
- data/lib/bigdecimal/ludcmp.rb +24 -20
- data/lib/bigdecimal/math.rb +33 -62
- data/lib/bigdecimal/newton.rb +6 -5
- data/lib/bigdecimal/util.rb +87 -43
- data/lib/rubysl/bigdecimal/version.rb +1 -1
- data/rubysl-bigdecimal.gemspec +3 -1
- metadata +20 -23
- data/lib/bigdecimal/README +0 -60
- data/lib/bigdecimal/sample/linear.rb +0 -71
- data/lib/bigdecimal/sample/nlsolve.rb +0 -38
- data/lib/bigdecimal/sample/pi.rb +0 -20
data/lib/bigdecimal/newton.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
require "bigdecimal/ludcmp"
|
2
|
+
require "bigdecimal/jacobian"
|
3
|
+
|
1
4
|
#
|
2
|
-
# newton.rb
|
5
|
+
# newton.rb
|
3
6
|
#
|
4
7
|
# Solves the nonlinear algebraic equation system f = 0 by Newton's method.
|
5
8
|
# This program is not dependent on BigDecimal.
|
@@ -22,13 +25,11 @@
|
|
22
25
|
#
|
23
26
|
# On exit, x is the solution vector.
|
24
27
|
#
|
25
|
-
require "bigdecimal/ludcmp"
|
26
|
-
require "bigdecimal/jacobian"
|
27
|
-
|
28
28
|
module Newton
|
29
29
|
include LUSolve
|
30
30
|
include Jacobian
|
31
|
-
|
31
|
+
module_function
|
32
|
+
|
32
33
|
def norm(fv,zero=0.0)
|
33
34
|
s = zero
|
34
35
|
n = fv.size
|
data/lib/bigdecimal/util.rb
CHANGED
@@ -1,65 +1,109 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# BigDecimal#to_r -> Rational
|
15
|
-
#
|
16
|
-
# ----------------------------------------------------------------------
|
17
|
-
#
|
18
|
-
class Float < Numeric
|
1
|
+
class Integer < Numeric
|
2
|
+
# call-seq:
|
3
|
+
# int.to_d -> bigdecimal
|
4
|
+
#
|
5
|
+
# Convert +int+ to a BigDecimal and return it.
|
6
|
+
#
|
7
|
+
# require 'bigdecimal'
|
8
|
+
# require 'bigdecimal/util'
|
9
|
+
#
|
10
|
+
# 42.to_d
|
11
|
+
# # => #<BigDecimal:1008ef070,'0.42E2',9(36)>
|
12
|
+
#
|
19
13
|
def to_d
|
20
|
-
BigDecimal(self
|
14
|
+
BigDecimal(self)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Float < Numeric
|
19
|
+
# call-seq:
|
20
|
+
# flt.to_d(precision=nil) -> bigdecimal
|
21
|
+
#
|
22
|
+
# Convert +flt+ to a BigDecimal and return it.
|
23
|
+
#
|
24
|
+
# require 'bigdecimal'
|
25
|
+
# require 'bigdecimal/util'
|
26
|
+
#
|
27
|
+
# 0.5.to_d
|
28
|
+
# # => #<BigDecimal:1dc69e0,'0.5E0',9(18)>
|
29
|
+
#
|
30
|
+
def to_d(precision=nil)
|
31
|
+
BigDecimal(self, precision || Float::DIG+1)
|
21
32
|
end
|
22
33
|
end
|
23
34
|
|
24
35
|
class String
|
36
|
+
# call-seq:
|
37
|
+
# string.to_d -> bigdecimal
|
38
|
+
#
|
39
|
+
# Convert +string+ to a BigDecimal and return it.
|
40
|
+
#
|
41
|
+
# require 'bigdecimal'
|
42
|
+
# require 'bigdecimal/util'
|
43
|
+
#
|
44
|
+
# "0.5".to_d
|
45
|
+
# # => #<BigDecimal:1dc69e0,'0.5E0',9(18)>
|
46
|
+
#
|
25
47
|
def to_d
|
26
48
|
BigDecimal(self)
|
27
49
|
end
|
28
50
|
end
|
29
51
|
|
30
52
|
class BigDecimal < Numeric
|
53
|
+
# call-seq:
|
54
|
+
# a.to_digits -> string
|
55
|
+
#
|
31
56
|
# Converts a BigDecimal to a String of the form "nnnnnn.mmm".
|
32
57
|
# This method is deprecated; use BigDecimal#to_s("F") instead.
|
58
|
+
#
|
59
|
+
# require 'bigdecimal'
|
60
|
+
# require 'bigdecimal/util'
|
61
|
+
#
|
62
|
+
# d = BigDecimal.new("3.14")
|
63
|
+
# d.to_digits
|
64
|
+
# # => "3.14"
|
33
65
|
def to_digits
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
66
|
+
if self.nan? || self.infinite? || self.zero?
|
67
|
+
self.to_s
|
68
|
+
else
|
69
|
+
i = self.to_i.to_s
|
70
|
+
_,f,_,z = self.frac.split
|
71
|
+
i + "." + ("0"*(-z)) + f
|
72
|
+
end
|
41
73
|
end
|
42
74
|
|
43
|
-
#
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
Rational(numerator,base ** (-denomi_power))
|
50
|
-
else
|
51
|
-
Rational(numerator * (base ** denomi_power),1)
|
52
|
-
end
|
75
|
+
# call-seq:
|
76
|
+
# a.to_d -> bigdecimal
|
77
|
+
#
|
78
|
+
# Returns self.
|
79
|
+
def to_d
|
80
|
+
self
|
53
81
|
end
|
54
82
|
end
|
55
83
|
|
56
84
|
class Rational < Numeric
|
57
|
-
#
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
85
|
+
# call-seq:
|
86
|
+
# r.to_d(sig) -> bigdecimal
|
87
|
+
#
|
88
|
+
# Converts a Rational to a BigDecimal. Takes an optional parameter +sig+ to
|
89
|
+
# limit the amount of significant digits.
|
90
|
+
# If a negative precision is given, raise ArgumentError.
|
91
|
+
# The zero precision and implicit precision is deprecated.
|
92
|
+
#
|
93
|
+
# r = (22/7.0).to_r
|
94
|
+
# # => (7077085128725065/2251799813685248)
|
95
|
+
# r.to_d
|
96
|
+
# # => #<BigDecimal:1a52bd8,'0.3142857142 8571427937 0154144999 105E1',45(63)>
|
97
|
+
# r.to_d(3)
|
98
|
+
# # => #<BigDecimal:1a44d08,'0.314E1',18(36)>
|
99
|
+
def to_d(precision=0)
|
100
|
+
if precision < 0
|
101
|
+
raise ArgumentError, "negative precision"
|
102
|
+
elsif precision == 0
|
103
|
+
warn "zero and implicit precision is deprecated."
|
104
|
+
precision = BigDecimal.double_fig*2+1
|
105
|
+
end
|
106
|
+
num = self.numerator
|
107
|
+
BigDecimal(num).div(self.denominator, precision)
|
64
108
|
end
|
65
109
|
end
|
data/rubysl-bigdecimal.gemspec
CHANGED
@@ -17,8 +17,10 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
+
spec.required_ruby_version = "~> 2.0"
|
21
|
+
|
20
22
|
spec.add_development_dependency "bundler", "~> 1.3"
|
21
23
|
spec.add_development_dependency "rake", "~> 10.0"
|
22
24
|
spec.add_development_dependency "mspec", "~> 1.5"
|
23
|
-
spec.add_development_dependency "rubysl-prettyprint", "~>
|
25
|
+
spec.add_development_dependency "rubysl-prettyprint", "~> 2.0"
|
24
26
|
end
|
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubysl-bigdecimal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Shirai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.5'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.5'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rubysl-prettyprint
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '2.0'
|
69
69
|
description: Ruby standard library bigdecimal.
|
70
70
|
email:
|
71
71
|
- brixen@gmail.com
|
@@ -74,26 +74,22 @@ extensions:
|
|
74
74
|
- ext/rubysl/bigdecimal/extconf.rb
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
|
-
- .gitignore
|
78
|
-
- .travis.yml
|
77
|
+
- ".gitignore"
|
78
|
+
- ".travis.yml"
|
79
79
|
- Gemfile
|
80
80
|
- LICENSE
|
81
81
|
- README.md
|
82
82
|
- Rakefile
|
83
|
+
- bigdecimal_en.html
|
84
|
+
- bigdecimal_ja.html
|
83
85
|
- ext/rubysl/bigdecimal/bigdecimal.c
|
84
86
|
- ext/rubysl/bigdecimal/bigdecimal.h
|
85
87
|
- ext/rubysl/bigdecimal/extconf.rb
|
86
88
|
- lib/bigdecimal.rb
|
87
|
-
- lib/bigdecimal/README
|
88
|
-
- lib/bigdecimal/bigdecimal_en.html
|
89
|
-
- lib/bigdecimal/bigdecimal_ja.html
|
90
89
|
- lib/bigdecimal/jacobian.rb
|
91
90
|
- lib/bigdecimal/ludcmp.rb
|
92
91
|
- lib/bigdecimal/math.rb
|
93
92
|
- lib/bigdecimal/newton.rb
|
94
|
-
- lib/bigdecimal/sample/linear.rb
|
95
|
-
- lib/bigdecimal/sample/nlsolve.rb
|
96
|
-
- lib/bigdecimal/sample/pi.rb
|
97
93
|
- lib/bigdecimal/util.rb
|
98
94
|
- lib/rubysl/bigdecimal.rb
|
99
95
|
- lib/rubysl/bigdecimal/version.rb
|
@@ -167,12 +163,12 @@ require_paths:
|
|
167
163
|
- lib
|
168
164
|
required_ruby_version: !ruby/object:Gem::Requirement
|
169
165
|
requirements:
|
170
|
-
- -
|
166
|
+
- - "~>"
|
171
167
|
- !ruby/object:Gem::Version
|
172
|
-
version: '0'
|
168
|
+
version: '2.0'
|
173
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
170
|
requirements:
|
175
|
-
- -
|
171
|
+
- - ">="
|
176
172
|
- !ruby/object:Gem::Version
|
177
173
|
version: '0'
|
178
174
|
requirements: []
|
@@ -241,3 +237,4 @@ test_files:
|
|
241
237
|
- spec/uplus_spec.rb
|
242
238
|
- spec/ver_spec.rb
|
243
239
|
- spec/zero_spec.rb
|
240
|
+
has_rdoc:
|
data/lib/bigdecimal/README
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
|
2
|
-
Ruby BIGDECIMAL(Variable Precision) extension library.
|
3
|
-
Copyright (C) 1999 by Shigeo Kobayashi(shigeo@tinyforest.gr.jp)
|
4
|
-
|
5
|
-
BigDecimal is copyrighted free software by Shigeo Kobayashi <shigeo@tinyforest.gr.jp>.
|
6
|
-
You can redistribute it and/or modify it under either the terms of the GPL
|
7
|
-
(see COPYING file), or the conditions below:
|
8
|
-
|
9
|
-
1. You may make and give away verbatim copies of the source form of the
|
10
|
-
software without restriction, provided that you duplicate all of the
|
11
|
-
original copyright notices and associated disclaimers.
|
12
|
-
|
13
|
-
2. You may modify your copy of the software in any way, provided that
|
14
|
-
you do at least ONE of the following:
|
15
|
-
|
16
|
-
a) place your modifications in the Public Domain or otherwise
|
17
|
-
make them Freely Available, such as by posting said
|
18
|
-
modifications to Usenet or an equivalent medium, or by allowing
|
19
|
-
the author to include your modifications in the software.
|
20
|
-
|
21
|
-
b) use the modified software only within your corporation or
|
22
|
-
organization.
|
23
|
-
|
24
|
-
c) rename any non-standard executables so the names do not conflict
|
25
|
-
with standard executables, which must also be provided.
|
26
|
-
|
27
|
-
d) make other distribution arrangements with the author.
|
28
|
-
|
29
|
-
3. You may distribute the software in object code or executable
|
30
|
-
form, provided that you do at least ONE of the following:
|
31
|
-
|
32
|
-
a) distribute the executables and library files of the software,
|
33
|
-
together with instructions (in the manual page or equivalent)
|
34
|
-
on where to get the original distribution.
|
35
|
-
|
36
|
-
b) accompany the distribution with the machine-readable source of
|
37
|
-
the software.
|
38
|
-
|
39
|
-
c) give non-standard executables non-standard names, with
|
40
|
-
instructions on where to get the original software distribution.
|
41
|
-
|
42
|
-
d) make other distribution arrangements with the author.
|
43
|
-
|
44
|
-
4. You may modify and include the part of the software into any other
|
45
|
-
software (possibly commercial).
|
46
|
-
|
47
|
-
5. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
48
|
-
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
49
|
-
WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
|
50
|
-
PURPOSE.
|
51
|
-
|
52
|
-
* The Author
|
53
|
-
|
54
|
-
Feel free to send comments and bug reports to the author. Here is the
|
55
|
-
author's latest mail address:
|
56
|
-
|
57
|
-
shigeo@tinyforest.gr.jp
|
58
|
-
|
59
|
-
-------------------------------------------------------
|
60
|
-
created at: Thu Dec 22 1999
|
@@ -1,71 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
|
3
|
-
#
|
4
|
-
# linear.rb
|
5
|
-
#
|
6
|
-
# Solves linear equation system(A*x = b) by LU decomposition method.
|
7
|
-
# where A is a coefficient matrix,x is an answer vector,b is a constant vector.
|
8
|
-
#
|
9
|
-
# USAGE:
|
10
|
-
# ruby linear.rb [input file solved]
|
11
|
-
#
|
12
|
-
|
13
|
-
require "bigdecimal"
|
14
|
-
require "bigdecimal/ludcmp"
|
15
|
-
|
16
|
-
#
|
17
|
-
# NOTE:
|
18
|
-
# Change following BigDecimal::limit() if needed.
|
19
|
-
BigDecimal::limit(100)
|
20
|
-
#
|
21
|
-
|
22
|
-
include LUSolve
|
23
|
-
def rd_order(na)
|
24
|
-
printf("Number of equations ?") if(na <= 0)
|
25
|
-
n = ARGF.gets().to_i
|
26
|
-
end
|
27
|
-
|
28
|
-
na = ARGV.size
|
29
|
-
zero = BigDecimal::new("0.0")
|
30
|
-
one = BigDecimal::new("1.0")
|
31
|
-
|
32
|
-
while (n=rd_order(na))>0
|
33
|
-
a = []
|
34
|
-
as= []
|
35
|
-
b = []
|
36
|
-
if na <= 0
|
37
|
-
# Read data from console.
|
38
|
-
printf("\nEnter coefficient matrix element A[i,j]\n");
|
39
|
-
for i in 0...n do
|
40
|
-
for j in 0...n do
|
41
|
-
printf("A[%d,%d]? ",i,j); s = ARGF.gets
|
42
|
-
a << BigDecimal::new(s);
|
43
|
-
as << BigDecimal::new(s);
|
44
|
-
end
|
45
|
-
printf("Contatant vector element b[%d] ? ",i); b << BigDecimal::new(ARGF.gets);
|
46
|
-
end
|
47
|
-
else
|
48
|
-
# Read data from specified file.
|
49
|
-
printf("Coefficient matrix and constant vector.\n");
|
50
|
-
for i in 0...n do
|
51
|
-
s = ARGF.gets
|
52
|
-
printf("%d) %s",i,s)
|
53
|
-
s = s.split
|
54
|
-
for j in 0...n do
|
55
|
-
a << BigDecimal::new(s[j]);
|
56
|
-
as << BigDecimal::new(s[j]);
|
57
|
-
end
|
58
|
-
b << BigDecimal::new(s[n]);
|
59
|
-
end
|
60
|
-
end
|
61
|
-
x = lusolve(a,b,ludecomp(a,n,zero,one),zero)
|
62
|
-
printf("Answer(x[i] & (A*x-b)[i]) follows\n")
|
63
|
-
for i in 0...n do
|
64
|
-
printf("x[%d]=%s ",i,x[i].to_s)
|
65
|
-
s = zero
|
66
|
-
for j in 0...n do
|
67
|
-
s = s + as[i*n+j]*x[j]
|
68
|
-
end
|
69
|
-
printf(" & %s\n",(s-b[i]).to_s)
|
70
|
-
end
|
71
|
-
end
|