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"