frac 0.9.5 → 0.9.6
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.
- data/.gitignore +49 -0
- data/CHANGELOG.md +18 -0
- data/Gemfile +5 -0
- data/Rakefile +53 -0
- data/VERSION +1 -1
- data/ext/frac_ext.c +3 -4
- data/ext/frac_ext.java +73 -0
- data/frac.gemspec +39 -47
- data/lib/frac.rb +23 -9
- data/lib/frac_ext.jar +0 -0
- metadata +90 -76
data/.gitignore
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Gemstuff
|
2
|
+
Gemfile.lock
|
3
|
+
|
4
|
+
# compiled
|
5
|
+
lib/frac_ext.so
|
6
|
+
tmp
|
7
|
+
|
8
|
+
# rcov generated
|
9
|
+
coverage
|
10
|
+
|
11
|
+
# rdoc generated
|
12
|
+
rdoc
|
13
|
+
|
14
|
+
# yard generated
|
15
|
+
doc
|
16
|
+
.yardoc
|
17
|
+
|
18
|
+
# bundler
|
19
|
+
.bundle
|
20
|
+
|
21
|
+
# jeweler generated
|
22
|
+
pkg
|
23
|
+
|
24
|
+
# Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
|
25
|
+
#
|
26
|
+
# * Create a file at ~/.gitignore
|
27
|
+
# * Include files you want ignored
|
28
|
+
# * Run: git config --global core.excludesfile ~/.gitignore
|
29
|
+
#
|
30
|
+
# After doing this, these files will be ignored in all your git projects,
|
31
|
+
# saving you from having to 'pollute' every project you touch with them
|
32
|
+
#
|
33
|
+
# Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
|
34
|
+
|
35
|
+
# For MacOS:
|
36
|
+
|
37
|
+
.DS_Store
|
38
|
+
|
39
|
+
# For TextMate
|
40
|
+
*.tmproj
|
41
|
+
tmtags
|
42
|
+
|
43
|
+
# For emacs:
|
44
|
+
*~
|
45
|
+
\#*
|
46
|
+
.\#*
|
47
|
+
|
48
|
+
# For vim:
|
49
|
+
*.swp
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
0.9.6
|
2
|
+
============
|
3
|
+
* Added JRuby support - [@dblock](https://github.com/dblock).
|
4
|
+
|
5
|
+
0.9.5 (June 18, 2011)
|
6
|
+
=====================
|
7
|
+
* Added bundler support - [@dblock](https://github.com/dblock).
|
8
|
+
* Added `Math::Fraction` with string parsing support - [@dblock](https://github.com/dblock).
|
9
|
+
* Improved negative number precision - [@dblock](https://github.com/dblock).
|
10
|
+
|
11
|
+
0.9.3 (May 25, 2010)
|
12
|
+
=====================
|
13
|
+
* Added JavaScript implementation - [@valodzka](https://github.com/valodzka).
|
14
|
+
|
15
|
+
0.9.0 (May 24, 2010)
|
16
|
+
=====================
|
17
|
+
|
18
|
+
* Initial public release - [@valodzka](https://github.com/valodzka).
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
begin
|
5
|
+
Bundler.setup(:default, :development)
|
6
|
+
rescue Bundler::BundlerError => e
|
7
|
+
$stderr.puts e.message
|
8
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
9
|
+
exit e.status_code
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
if RUBY_PLATFORM =~ /java/
|
15
|
+
require 'rake/javaextensiontask'
|
16
|
+
Rake::JavaExtensionTask.new do |ext|
|
17
|
+
ext.name = 'frac_ext'
|
18
|
+
end
|
19
|
+
else
|
20
|
+
require 'rake/extensiontask'
|
21
|
+
Rake::ExtensionTask.new do |ext|
|
22
|
+
ext.ext_dir = 'ext'
|
23
|
+
ext.lib_dir = 'lib'
|
24
|
+
ext.name = 'frac_ext'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
Rake::TestTask.new(:test) do |test|
|
30
|
+
test.libs << 'lib' << 'test'
|
31
|
+
test.pattern = 'test/**/*.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
|
35
|
+
require 'rcov/rcovtask'
|
36
|
+
Rcov::RcovTask.new do |test|
|
37
|
+
test.libs << 'test'
|
38
|
+
test.pattern = 'test/**/*.rb'
|
39
|
+
test.verbose = true
|
40
|
+
end
|
41
|
+
|
42
|
+
task :default => [ :compile, :test ]
|
43
|
+
|
44
|
+
require 'rdoc/task'
|
45
|
+
Rake::RDocTask.new do |rdoc|
|
46
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
47
|
+
|
48
|
+
rdoc.rdoc_dir = 'rdoc'
|
49
|
+
rdoc.title = "frac #{version}"
|
50
|
+
rdoc.rdoc_files.include('README*')
|
51
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
52
|
+
end
|
53
|
+
|
data/VERSION
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.6
|
2
2
|
|
data/ext/frac_ext.c
CHANGED
@@ -37,9 +37,8 @@
|
|
37
37
|
# define N2R LONG2NUM
|
38
38
|
#endif
|
39
39
|
|
40
|
-
static VALUE find_fracs(VALUE mod, VALUE rv, VALUE dv)
|
40
|
+
static VALUE find_fracs(VALUE mod, VALUE rv, VALUE dv)
|
41
41
|
{
|
42
|
-
VALUE ret;
|
43
42
|
N_TYPE m[2][2], ai, maxden = R2N(rb_Integer(dv));
|
44
43
|
double startx, x = RFLOAT_VALUE(rb_Float(rv));
|
45
44
|
int sign = 1;
|
@@ -70,7 +69,7 @@ static VALUE find_fracs(VALUE mod, VALUE rv, VALUE dv)
|
|
70
69
|
if(x==(double)ai) break; // AF: division by zero
|
71
70
|
x = 1/(x - (double) ai);
|
72
71
|
if(x>(double)0x7FFFFFFF) break; // AF: representation failure
|
73
|
-
}
|
72
|
+
}
|
74
73
|
|
75
74
|
{
|
76
75
|
/* now remaining x is between 0 and 1/ai */
|
@@ -95,7 +94,7 @@ static VALUE find_fracs(VALUE mod, VALUE rv, VALUE dv)
|
|
95
94
|
}
|
96
95
|
}
|
97
96
|
|
98
|
-
void Init_frac_ext()
|
97
|
+
void Init_frac_ext()
|
99
98
|
{
|
100
99
|
rb_define_module_function(rb_mMath, "find_fracs", find_fracs, 2);
|
101
100
|
}
|
data/ext/frac_ext.java
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
package com.github.valodzka.frac;
|
2
|
+
|
3
|
+
import java.io.IOException;
|
4
|
+
import java.lang.IllegalArgumentException;
|
5
|
+
|
6
|
+
import org.jruby.Ruby;
|
7
|
+
import org.jruby.anno.JRubyMethod;
|
8
|
+
|
9
|
+
public class frac_ext {
|
10
|
+
|
11
|
+
@JRubyMethod
|
12
|
+
public static double[] find_fracs(double rv, long dv)
|
13
|
+
{
|
14
|
+
long m[][] = new long[2][2];
|
15
|
+
long ai;
|
16
|
+
long maxden = dv;
|
17
|
+
double startx = rv;
|
18
|
+
double x = rv;
|
19
|
+
|
20
|
+
int sign = 1;
|
21
|
+
|
22
|
+
if (maxden <= 0) {
|
23
|
+
throw new IllegalArgumentException("maximum denominator should be > 0");
|
24
|
+
}
|
25
|
+
|
26
|
+
if (x < 0) {
|
27
|
+
sign = -1;
|
28
|
+
x = -x;
|
29
|
+
}
|
30
|
+
|
31
|
+
startx = x;
|
32
|
+
|
33
|
+
/* initialize matrix */
|
34
|
+
m[0][0] = m[1][1] = 1;
|
35
|
+
m[0][1] = m[1][0] = 0;
|
36
|
+
|
37
|
+
/* loop finding terms until denom gets too big */
|
38
|
+
while (m[1][0] * ( ai = (long) x ) + m[1][1] <= maxden) {
|
39
|
+
long t;
|
40
|
+
t = m[0][0] * ai + m[0][1];
|
41
|
+
m[0][1] = m[0][0];
|
42
|
+
m[0][0] = t;
|
43
|
+
t = m[1][0] * ai + m[1][1];
|
44
|
+
m[1][1] = m[1][0];
|
45
|
+
m[1][0] = t;
|
46
|
+
if(x == (long) ai) break; // AF: division by zero
|
47
|
+
x = 1/(x - ai);
|
48
|
+
if(x > (double) 0x7FFFFFFF) break; // AF: representation failure
|
49
|
+
}
|
50
|
+
|
51
|
+
{
|
52
|
+
/* now remaining x is between 0 and 1/ai */
|
53
|
+
/* approx as either 0 or 1/m where m is max that will fit in maxden */
|
54
|
+
/* first try zero */
|
55
|
+
double num1 = sign*m[0][0];
|
56
|
+
double den1 = m[1][0];
|
57
|
+
double err1 = startx - (m[0][0] / m[1][0]);
|
58
|
+
|
59
|
+
/* now try other possibility */
|
60
|
+
ai = (maxden - m[1][1]) / m[1][0];
|
61
|
+
m[0][0] = m[0][0] * ai + m[0][1];
|
62
|
+
m[1][0] = m[1][0] * ai + m[1][1];
|
63
|
+
|
64
|
+
double num2 = sign*m[0][0];
|
65
|
+
double den2 = m[1][0];
|
66
|
+
double err2 = startx - (m[0][0] / m[1][0]);
|
67
|
+
|
68
|
+
return new double[]{ num1, den1, err1, num2, den2, err2 };
|
69
|
+
}
|
70
|
+
|
71
|
+
}
|
72
|
+
|
73
|
+
};
|
data/frac.gemspec
CHANGED
@@ -1,53 +1,45 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
5
3
|
|
6
4
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.9.
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
13
|
-
|
14
|
-
s.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
s.files = [
|
19
|
-
"README.rdoc",
|
20
|
-
"VERSION",
|
21
|
-
"ext/extconf.rb",
|
22
|
-
"ext/frac_ext.c",
|
23
|
-
"frac.gemspec",
|
24
|
-
"lib/frac.js",
|
25
|
-
"lib/frac.rb",
|
26
|
-
"test/frac_test.html",
|
27
|
-
"test/frac_test.rb"
|
28
|
-
]
|
29
|
-
s.homepage = %q{https://github.com/valodzka/frac}
|
30
|
-
s.licenses = ["MIT license"]
|
31
|
-
s.require_paths = ["lib"]
|
32
|
-
s.rubygems_version = %q{1.6.2}
|
33
|
-
s.summary = %q{Find rational approximation to given real number. Based on the theory of continued fractions if x = a1 + 1/(a2 + 1/(a3 + 1/(a4 + ...))) then best approximation is found by truncating this series (with some adjustments in the last term). Note the fraction can be recovered as the first column of the matrix ( a1 1 ) ( a2 1 ) ( a3 1 ) ... ( 1 0 ) ( 1 0 ) ( 1 0 ) Instead of keeping the sequence of continued fraction terms, we just keep the last partial product of these matrices.}
|
34
|
-
|
35
|
-
if s.respond_to? :specification_version then
|
36
|
-
s.specification_version = 3
|
37
|
-
|
38
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
39
|
-
s.add_development_dependency(%q<rake>, [">= 0"])
|
40
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
41
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
42
|
-
else
|
43
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
44
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
45
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
46
|
-
end
|
5
|
+
s.name = "frac"
|
6
|
+
s.version = "0.9.6"
|
7
|
+
|
8
|
+
s.authors = [ "Pavel Valodzka" ]
|
9
|
+
s.email = "pavel@valodzka.name"
|
10
|
+
s.homepage = "https://github.com/valodzka/frac"
|
11
|
+
|
12
|
+
s.files = `git ls-files`.split("\n")
|
13
|
+
if RUBY_PLATFORM =~ /java/
|
14
|
+
s.platform = "java"
|
15
|
+
s.files << "lib/frac_ext.jar"
|
47
16
|
else
|
48
|
-
s.
|
49
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
50
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
17
|
+
s.extensions = [ "ext/extconf.rb" ]
|
51
18
|
end
|
52
|
-
end
|
53
19
|
|
20
|
+
s.licenses = [ "MIT" ]
|
21
|
+
s.require_paths = [ "lib" ]
|
22
|
+
s.rubygems_version = "1.6.2"
|
23
|
+
s.summary = <<-SUMMARY
|
24
|
+
Find rational approximation to given real number.
|
25
|
+
|
26
|
+
Based on the theory of continued fractions
|
27
|
+
|
28
|
+
if x = a1 + 1/(a2 + 1/(a3 + 1/(a4 + ...)))
|
29
|
+
|
30
|
+
then best approximation is found by truncating this series
|
31
|
+
(with some adjustments in the last term).
|
32
|
+
Note the fraction can be recovered as the first column of the matrix
|
33
|
+
|
34
|
+
( a1 1 ) ( a2 1 ) ( a3 1 ) ...
|
35
|
+
( 1 0 ) ( 1 0 ) ( 1 0 )
|
36
|
+
|
37
|
+
Instead of keeping the sequence of continued fraction terms,
|
38
|
+
we just keep the last partial product of these matrices.
|
39
|
+
SUMMARY
|
40
|
+
|
41
|
+
s.add_development_dependency("rake", "~> 10.0")
|
42
|
+
s.add_development_dependency("rake-compiler")
|
43
|
+
s.add_development_dependency("rcov", "~> 0.9")
|
44
|
+
s.add_development_dependency("rdoc")
|
45
|
+
end
|
data/lib/frac.rb
CHANGED
@@ -5,14 +5,28 @@ require File.join(File.dirname(__FILE__), %w{.. lib frac_ext})
|
|
5
5
|
module Math
|
6
6
|
|
7
7
|
class << self
|
8
|
-
|
9
|
-
|
8
|
+
|
10
9
|
def frac(float, maxden)
|
11
10
|
arr = find_fracs(float, maxden)
|
12
11
|
arr[2].abs > arr[5].abs ? Rational(arr[3], arr[4]) : Rational(arr[0], arr[1])
|
13
12
|
end
|
13
|
+
|
14
|
+
if RUBY_PLATFORM =~ /java/
|
15
|
+
require 'jruby'
|
16
|
+
private
|
17
|
+
def find_fracs(float, maxden)
|
18
|
+
begin
|
19
|
+
com.github.valodzka.frac.frac_ext.find_fracs Float(float), Integer(maxden)
|
20
|
+
rescue Java::JavaLang::IllegalArgumentException => e
|
21
|
+
raise ArgumentError, e.message
|
22
|
+
end
|
23
|
+
end
|
24
|
+
else
|
25
|
+
private :find_fracs
|
26
|
+
end
|
27
|
+
|
14
28
|
end
|
15
|
-
|
29
|
+
|
16
30
|
class Fraction
|
17
31
|
|
18
32
|
def initialize(float, maxden = 0x100)
|
@@ -31,13 +45,13 @@ module Math
|
|
31
45
|
@r = Math.frac(float, maxden)
|
32
46
|
end
|
33
47
|
end
|
34
|
-
|
48
|
+
|
35
49
|
def to_a
|
36
50
|
i = @r.to_i
|
37
51
|
sign = i >= 0 ? 1 : -1
|
38
52
|
[ i, (@r.numerator - i * @r.denominator) * sign, @r.denominator ]
|
39
53
|
end
|
40
|
-
|
54
|
+
|
41
55
|
def to_r
|
42
56
|
@r
|
43
57
|
end
|
@@ -45,7 +59,7 @@ module Math
|
|
45
59
|
def to_f
|
46
60
|
@r.to_f
|
47
61
|
end
|
48
|
-
|
62
|
+
|
49
63
|
def to_s
|
50
64
|
n = to_a
|
51
65
|
if n[1] == 0
|
@@ -54,9 +68,9 @@ module Math
|
|
54
68
|
"#{n[1]}/#{n[2]}"
|
55
69
|
else
|
56
70
|
"#{n[0]} #{n[1]}/#{n[2]}"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
60
74
|
end
|
61
75
|
end
|
62
76
|
|
data/lib/frac_ext.jar
ADDED
Binary file
|
metadata
CHANGED
@@ -1,116 +1,130 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: frac
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 9
|
9
|
-
- 5
|
10
|
-
version: 0.9.5
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.6
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Pavel Valodzka
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-01-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rake
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '10.0'
|
33
22
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: jeweler
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '10.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake-compiler
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
39
33
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 0
|
46
|
-
version: "0"
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
47
38
|
type: :development
|
48
|
-
|
49
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
50
47
|
name: rcov
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.9'
|
54
|
+
type: :development
|
51
55
|
prerelease: false
|
52
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.9'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rdoc
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
53
65
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
segments:
|
59
|
-
- 0
|
60
|
-
version: "0"
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
61
70
|
type: :development
|
62
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
63
78
|
description:
|
64
79
|
email: pavel@valodzka.name
|
65
80
|
executables: []
|
66
|
-
|
67
|
-
extensions:
|
81
|
+
extensions:
|
68
82
|
- ext/extconf.rb
|
69
|
-
extra_rdoc_files:
|
70
|
-
|
71
|
-
|
83
|
+
extra_rdoc_files: []
|
84
|
+
files:
|
85
|
+
- .gitignore
|
86
|
+
- CHANGELOG.md
|
87
|
+
- Gemfile
|
72
88
|
- README.rdoc
|
89
|
+
- Rakefile
|
73
90
|
- VERSION
|
74
91
|
- ext/extconf.rb
|
75
92
|
- ext/frac_ext.c
|
93
|
+
- ext/frac_ext.java
|
76
94
|
- frac.gemspec
|
77
95
|
- lib/frac.js
|
78
96
|
- lib/frac.rb
|
97
|
+
- lib/frac_ext.jar
|
79
98
|
- test/frac_test.html
|
80
99
|
- test/frac_test.rb
|
81
|
-
has_rdoc: true
|
82
100
|
homepage: https://github.com/valodzka/frac
|
83
|
-
licenses:
|
84
|
-
- MIT
|
101
|
+
licenses:
|
102
|
+
- MIT
|
85
103
|
post_install_message:
|
86
104
|
rdoc_options: []
|
87
|
-
|
88
|
-
require_paths:
|
105
|
+
require_paths:
|
89
106
|
- lib
|
90
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
108
|
none: false
|
92
|
-
requirements:
|
93
|
-
- -
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
|
96
|
-
|
97
|
-
- 0
|
98
|
-
version: "0"
|
99
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
114
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
105
|
-
segments:
|
106
|
-
- 0
|
107
|
-
version: "0"
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
108
119
|
requirements: []
|
109
|
-
|
110
120
|
rubyforge_project:
|
111
|
-
rubygems_version: 1.
|
121
|
+
rubygems_version: 1.8.23
|
112
122
|
signing_key:
|
113
123
|
specification_version: 3
|
114
|
-
summary: Find rational approximation to given real number. Based on the theory of
|
124
|
+
summary: Find rational approximation to given real number. Based on the theory of
|
125
|
+
continued fractions if x = a1 + 1/(a2 + 1/(a3 + 1/(a4 + ...))) then best approximation
|
126
|
+
is found by truncating this series (with some adjustments in the last term). Note
|
127
|
+
the fraction can be recovered as the first column of the matrix ( a1 1 ) ( a2 1
|
128
|
+
) ( a3 1 ) ... ( 1 0 ) ( 1 0 ) ( 1 0 ) Instead of keeping the sequence of continued
|
129
|
+
fraction terms, we just keep the last partial product of these matrices.
|
115
130
|
test_files: []
|
116
|
-
|