Still, it is fun for tinkering. If you run this Ruby script as is, it will calculate the square root of 2 to 1,000 digits. To adjust the precision, change the number of iterations on this line:

`while iterations < 1000`

Here is the entire script...

#!/usr/bin/ruby

# calculate a square root of 2 using longhand

def newroot(divisor, doubleroot)

# calculate new root

# formula is doubleroot _ * _ = closest to divisor

# try 9, then 8, then 7 ...

i = 9

while i >= 0

multiple1 = (doubleroot.to_s + i.to_s).to_i

multiple2 = i

product = multiple1 * multiple2

if product <= divisor

# found new root

root = i

# get modulus

modulus = divisor - product

break

end

i = i - 1

end

return root, modulus

end

roots = Array.new

# the nearest root to 2 is 1

root = 1

roots.push(root)

remainder = 2 - root

doubleroot = root * 2

divisor = remainder * 100

iterations = 0

while iterations < 1000

root,remainder = newroot(divisor, doubleroot)

roots.push(root)

# compute new doubleroot

return root, modulus

end

roots = Array.new

# the nearest root to 2 is 1

root = 1

roots.push(root)

remainder = 2 - root

doubleroot = root * 2

divisor = remainder * 100

iterations = 0

while iterations < 1000

root,remainder = newroot(divisor, doubleroot)

roots.push(root)

# compute new doubleroot

doubleroot = roots.to_s.to_i * 2

# compute divisor

divisor = remainder * 100

iterations = iterations + 1

print "iteration " + iterations.to_s + "\n"

end

print "final roots are " + roots.to_s + "\n"