numeric_memoist 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd7d14ad0102f36ee2d5cbdb5a267a9ceadf87f4
4
- data.tar.gz: a912f90e0d6a0ccecab4939a7127f3e578d81ecb
3
+ metadata.gz: 7c59a64bb7f5a78469f610035580e1c3b8af10e7
4
+ data.tar.gz: e3b2af1d76ac4e532315c58da7a035fc2340736a
5
5
  SHA512:
6
- metadata.gz: ed5e62405ae8f44f076efa4b2f17f473215bbaf2dba8027146d9af1961c2981672dd9ee75c92e61bfa184ba13fef8552bef10da74c82eb76cc89274f89044d11
7
- data.tar.gz: cbdbacc3d056193f64bddb10f3b43c793241530ca12254a2d74cdbc56ae8e022eb35e8420614d74bd86282baac24517babdf9db476ef7fa773cbea098d6b212c
6
+ metadata.gz: 13d05bb3e78b28339ae5b3aa88d860e7d145075acd5d51dc85918eb4e2ec6aae655ed43c2aa1a803ab5de0441e72ac30c0f1d59e8b5ed8f9e452de3812d4f781
7
+ data.tar.gz: cb7a1f338c77327b7dd3dd5452e7b0157fcda9b831864f772c2d7e3e7715966b300f39c3aab22c0250d13e0d11607e1830659ca34dea509dafe42988c2004be3
data/.gitignore CHANGED
@@ -2,6 +2,7 @@
2
2
  *.rbc
3
3
  .bundle
4
4
  .config
5
+ .ruby-version
5
6
  .yardoc
6
7
  Gemfile.lock
7
8
  InstalledFiles
@@ -0,0 +1,7 @@
1
+ # Change Log
2
+
3
+ ## [0.0.2](https://github.com/antimon2/numeric_memoist/tree/0.0.2) (2014-10-02)
4
+
5
+ - Just edit `isqrt_example.rb` for Ruby 2.4.0 .
6
+
7
+ ## [0.0.1](https://github.com/antimon2/numeric_memoist/tree/0.0.1) (2014-03-16)
data/README.md CHANGED
@@ -63,6 +63,11 @@ You may use another similar gem like [Memoist](https://github.com/matthewrudy/me
63
63
 
64
64
  This doesn't work on Ruby >= 2.0.0 for the same reason.
65
65
 
66
+ ### For newer Rubies
67
+
68
+ NumericMemoist works well with Ruby 2.4.0 (tested with 2.4.0-preview2).
69
+ An old example (bundled with NumericMemoist v0.0.1) does not work with Ruby >= 2.4.0 (for `Integer`'s specification change). Updated example(s) in NumericMemoist >= v0.0.2 .
70
+
66
71
  ## Contributing
67
72
 
68
73
  1. Fork it
@@ -5,9 +5,20 @@ class Integer
5
5
  extend NumericMemoist
6
6
 
7
7
  def isqrt
8
+ if self < 0
9
+ $stderr.puts "sqrt(#{self}) is not a (real) number"
10
+ return 0.0/0 # => NaN
11
+ elsif self < 2
12
+ $stderr.puts "sqrt(#{self}) == #{self}."
13
+ return self
14
+ end
15
+ if self <= 0x20000000000000
16
+ $stderr.puts "calculate sqrt(#{self}).to_i (<= MaxIntFloat)"
17
+ return Math.sqrt(self).to_i
18
+ end
8
19
  $stderr.puts "calculate sqrt(#{self}).to_i"
9
20
  # === Newton-Raphson method ===
10
- n = self
21
+ n = self >> 26
11
22
  n = (n * n + self).div(2 * n) while n * n > self
12
23
  n
13
24
  end
@@ -19,21 +30,9 @@ class Integer
19
30
  memoize :isqrt, :sq?
20
31
  end
21
32
 
22
- class Fixnum
23
- # Need not to extend NumericMemoize (Integer has already extended NumericMemoize)
24
- def isqrt
25
- return super if self > 0x1fffffffffffff
26
- $stderr.puts "calculate sqrt(#{self}).to_i (for Fixnum)"
27
- return 0.0/0 if self < 0 # => NaN
28
- return self if self < 2
29
- Math.sqrt(self).to_i
30
- end
31
- memoize :isqrt
32
- end
33
-
34
33
  if $0 == __FILE__
35
34
  p 123456789.isqrt
36
- # STDERR> calculate sqrt(123456789).to_i (for Fixnum)
35
+ # STDERR> calculate sqrt(123456789).to_i (<= MaxIntFloat)
37
36
  # STDOUT> 11111
38
37
  p 123456789.sq?
39
38
  # STDERR> determining if 123456789 is square number
@@ -1,3 +1,3 @@
1
1
  module NumericMemoist
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: numeric_memoist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - antimon2
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-16 00:00:00.000000000 Z
11
+ date: 2016-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -47,6 +47,7 @@ extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
49
  - ".gitignore"
50
+ - CHANGELOG.md
50
51
  - Gemfile
51
52
  - LICENSE.txt
52
53
  - README.md
@@ -79,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
80
  version: '0'
80
81
  requirements: []
81
82
  rubyforge_project:
82
- rubygems_version: 2.2.0
83
+ rubygems_version: 2.4.8
83
84
  signing_key:
84
85
  specification_version: 4
85
86
  summary: Memoize methods in Integer/Float