Module: IntRoots

Included in:
Integer
Defined in:
lib/roots.rb

Instance Method Summary collapse

Instance Method Details

#iroot2Object

Newton’s method version used in Ruby for Integer#sqrt



210
211
212
213
214
215
216
217
# File 'lib/roots.rb', line 210

def iroot2       # Newton's method version used in Ruby for Integer#sqrt
  return nil if (n = self) < 0
  return n if n < 2
  b = n.bit_length
  x = 1 << (b-1)/2 | n >> (b/2 + 1)    # optimum initial root estimat
  while (t = n / x) < x; x = ((x + t) >> 1) end
  x
end

#irootn(n) ⇒ Object Also known as: iroot

Newton’s method for nth root



196
197
198
199
200
201
202
203
204
205
206
# File 'lib/roots.rb', line 196

def irootn(n)   # Newton's method for nth root
  return nil if self < 0 && n.even?
  raise "root n is < 2 or not an Integer" unless n.is_a?(Integer) && n > 1
  return self if self == 0 || (self == -1 && n.odd?)
  num = self.abs
  e, x = n-1, 1 << (num.bit_length-1)/n + 1
  while (t = (e * x + num / x ** e)/n) < x
    x = t
  end
  x *= self < 0 ? -1 : 1
end