view misc/sqrt/solution.py @ 0:20fea762903e

Import some exercises and solutions
author Louis Opter <kalessin@kalessin.fr>
date Sat, 29 Jun 2013 19:30:31 -0700
parents
children
line wrap: on
line source

#!/usr/bin/env python


def sq(n):
    return n * n


def sqrt(n, precision):
    pivot = n / 2.
    left_halve = (0, pivot)
    right_halve = (pivot, n)
    while 1:
        halve_size = left_halve[1] - left_halve[0]
        if sq(left_halve[0]) <= n <= sq(left_halve[1]):
            pivot = left_halve[0] + halve_size / 2.
            if halve_size <= precision:
                return pivot
            left_halve = (left_halve[0], pivot)
            right_halve = (pivot, left_halve[1])
        else:
            pivot = right_halve[0] + halve_size / 2.
            if halve_size <= precision:
                return pivot
            left_halve = (right_halve[0], pivot)
            right_halve = (pivot, right_halve[1])


print(sqrt(42, 1))
print(sqrt(4, 0.0011))
print(sqrt(2422.423, 0.1))