2016年5月25日水曜日

開発環境

Think Python (Allen B. Downey (著)、 O'Reilly Media)のChapter 7.(Iteration)のExercises 7-1(No. 1670)を取り組んでみる。

Exercises 7-1(No. 1670)

コード(Emacs)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import math

def my_sqrt(a):    
    x = 1
    epsilon = 0.000001
    while True:
        y = (x + a / x) / 2
        if abs(y - x) < epsilon:
            break
        x = y
    return y

def test_square_root():
    print('a    my_sqrt(a)     math.sqrt(a) diff\n'
          '---- ----------     ------------ ----')
    for a in range(1, 10):
        y0 = my_sqrt(a)
        y1 = math.sqrt(a)
        print('{0:<5}{1:<15.12}{2:<13.10} {3}'.format(
            float(a), y0, y1, abs(y0 - y1)))
        
if __name__ == '__main__':
    test_square_root()

入出力結果(Terminal, IPython)

$ ./sqrt.py
a    my_sqrt(a)     math.sqrt(a) diff
---- ----------     ------------ ----
1.0  1.0            1.0           0.0
2.0  1.41421356237  1.414213562   2.220446049250313e-16
3.0  1.73205080757  1.732050808   0.0
4.0  2.0            2.0           2.220446049250313e-15
5.0  2.2360679775   2.236067977   1.8829382497642655e-13
6.0  2.44948974278  2.449489743   0.0
7.0  2.64575131106  2.645751311   0.0
8.0  2.82842712475  2.828427125   4.440892098500626e-16
9.0  3.0            3.0           0.0
$

0 コメント:

コメントを投稿