# The following code should always work correctly,
# because integers don't overflow in Python.
# Accepts any type, returns type int or long.
# This routine is slow for large values,
# since the initial guess is 1.

def isqrt(i):
    "Compute the truncated square root of any non-negative integer."
    n = int(i)
    if n < 0:
	raise ValueError, "domain error"
	return
    xn = 1 # initial guess at the square root for the Babylonian iteration method
    xn1 = (xn + n/xn)/2
    while abs(xn1 - xn) > 1:
        xn = xn1
        xn1 = (xn + n/xn)/2
    while xn1*xn1 > n:
        xn1 -= 1
    if (xn1+1)*(xn1+1) <= n:
        raise ValueError, "failure of square root algorithm"
    return xn1


syntax highlighted by Code2HTML, v. 0.9.1