Module: Polyfill::V2_5::Integer::ClassMethods
- Defined in:
- lib/polyfill/v2_5/integer.rb
Instance Method Summary collapse
Instance Method Details
#sqrt(n) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/polyfill/v2_5/integer.rb', line 9 def sqrt(n) n = InternalUtils.to_int(n) if n < 0 raise Math::DomainError, 'Numerical argument is out of domain - "isqrt"' end res = 0 bit = 1 << ((n.size * 8) - 2) bit >>= 2 while bit > n while bit != 0 res_bit = res + bit if n >= res_bit n -= res_bit res = (res >> 1) + bit else res >>= 1 end bit >>= 2 end res end |