平方根

def my_square(n):
	x = 1.0
	while 1:
		if x * x >= n:
			x=(x * x + (x - 1) * (x - 1)) / 2
			for i in range(0,10):
				j = n / x
				x = (j + x) / 2
			print '%.30f' % x
			break
		else:
			x = x + 1

↑小数点下30桁まで計算できる

↓誤差が出ないバージョン。小数点以下100桁まで。

UNTIL = 100

def f(n):
    xn = 0
    while xn * xn < n:
        xn += 1
    return len(str(xn))

def g(s, p):
    return s[:p] + '.' + s[p:]

def sq(n):
    a, b = 5*n, 5
    res = ''
    sz = 0
    cnt = 0
    while sz <= UNTIL:
        if a >= b:
            a, b = a-b, b+10
            cnt += 1
        else:
            a, b = a*100, (b/10)*100 + b%10
            res += str(cnt)
            sz += 1
            cnt = 0
    return g(res, f(n))

print sq(2)
print sq(10000)

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS