procedure sqrtapprox(i)
   local x, half

   half := rational(1, 2, 1)

   x := rational(integer(sqrt(i)), 1, 1)

   i := rational(i, 1, 1)

   repeat {
      suspend x
      x := mpyrat(half, addrat(x, divrat(i, x, 1), 1))
      }

end