numeric_memoist 0.0.1 → 0.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 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