roots 2.0.1 → 2.1.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.
- checksums.yaml +4 -4
- data/lib/roots.rb +15 -5
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd63244d7b73fd41061b8ba024846116fcacd95e
|
4
|
+
data.tar.gz: 23fd715e6b991c71adcd74043f18e2ba4f165ba2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: daf32159f9103e28e2c5bfa1c9330869a677e0d586542f8e8ca1ac74b01ec414556a521c35cab7555026d3088fff5c3d98173eb87b72e23692693b3282191f2c
|
7
|
+
data.tar.gz: abb72e384abeda80bb8ef6c4595785961e87a73217635d8c02e57749e33226ec305aa9b0eb75c43e31a8699ae4dba2cdeb29398bdea7550ae222895a588d777b
|
data/lib/roots.rb
CHANGED
@@ -188,7 +188,7 @@ module Roots
|
|
188
188
|
Complex(x.real.round(Roots.digits_to_show), x.imag.round(Roots.digits_to_show))
|
189
189
|
end
|
190
190
|
end
|
191
|
-
|
191
|
+
|
192
192
|
# Mixin 'root' and 'roots' as methods for all number classes.
|
193
193
|
class Numeric; include Roots end
|
194
194
|
|
@@ -197,15 +197,25 @@ module IntRoots
|
|
197
197
|
return nil if self < 0 && n.even?
|
198
198
|
raise "root n is < 2 or not an Integer" unless n.is_a?(Integer) && n > 1
|
199
199
|
num = self.abs
|
200
|
-
root
|
201
|
-
|
200
|
+
root = bitn_mask = 1 << b = (num.bit_length - 1)/n
|
201
|
+
numb = 1 << b*n # make initial numb = root**n >= num
|
202
|
+
until ((bitn_mask >>= 1) == 0) || numb == num
|
202
203
|
root |= bitn_mask
|
203
|
-
root ^= bitn_mask if root**n > num
|
204
|
+
root ^= bitn_mask if (numb = root**n) > num
|
204
205
|
end
|
205
206
|
root *= (self < 0 ? -1 : 1)
|
206
207
|
end
|
207
208
|
|
208
|
-
|
209
|
+
alias iroot irootn # to provide more syntactic choice
|
210
|
+
|
211
|
+
def iroot2 # Newton's method version used in Ruby for Integer#sqrt
|
212
|
+
return nil if (n = self) < 0
|
213
|
+
return n if n < 2
|
214
|
+
b = n.bit_length
|
215
|
+
x = 1 << (b-1)/2 | n >> (b/2 + 1) # optimum initial root estimate
|
216
|
+
while (t = n / x) < x; x = ((x + t) >> 1) end
|
217
|
+
x
|
218
|
+
end
|
209
219
|
end
|
210
220
|
|
211
221
|
# Mixin 'iroot2' and 'irootn(n)' methods for class Integer
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roots
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jabari Zakiya
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -39,8 +39,8 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
description: 'For val (real/complex) and root n: val.root(n,[1-n]) and val.roots(n,
|
42
|
-
[opt]); For Integer ival: ival.iroot2 and ival.irootn(n); Roots.digits_to_show
|
43
|
-
see/change number of digts to show'
|
42
|
+
[opt]); For Integer ival: ival.iroot2, and ival.root(n) or ival.irootn(n); Roots.digits_to_show
|
43
|
+
to see/change number of digts to show'
|
44
44
|
email:
|
45
45
|
- jzakiya@gmail.com
|
46
46
|
executables: []
|
@@ -68,8 +68,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
68
|
version: '0'
|
69
69
|
requirements: []
|
70
70
|
rubyforge_project:
|
71
|
-
rubygems_version: 2.6.
|
71
|
+
rubygems_version: 2.6.11
|
72
72
|
signing_key:
|
73
73
|
specification_version: 4
|
74
|
-
summary:
|
74
|
+
summary: methods to compute all n roots of real/complex numbers, and real integer
|
75
|
+
roots
|
75
76
|
test_files: []
|