integer_square_root.sf 425 B

123456789101112131415161718192021222324252627
  1. #!/usr/bin/ruby
  2. # Newton's method for computing the integer square root of n.
  3. # Algorithm presented in the book:
  4. #
  5. # Modern Computer Arithmetic
  6. # - by Richard P. Brent and Paul Zimmermann
  7. #
  8. func sqrtint(n) {
  9. var s = n
  10. var u = s
  11. loop {
  12. u = ((s + (n // s)) >> 1)
  13. break if (u >= s)
  14. s = u
  15. }
  16. return s
  17. }
  18. say sqrtint(144**2) #=> 144
  19. say sqrtint(123456) #=> 351