2017年2月22日水曜日

開発環境

関数プログラミング入門(Richard Bird (著)、山下伸夫 (翻訳)、オーム社)の第3章(数値)、3.6(例: 線形探索と二分探索)、練習問題3.6.1、3.6.2、3.6.3、3.6.4を取り組んでみる。

練習問題3.6.1、3.6.2、3.6.3、3.6.4

コード(Emacs)

-- 3.6.3
eps :: Double
eps = 0.00001

sqrt :: Double -> Double
sqrt x = until done improve x
  where done y = abs (y * y - x) < eps * x
        improve y = (y + x / y) / 2        

-- 3.6.4
sqrt' x = until done improve x
  where done y = abs (y - y') < eps * abs y
          where y' = improve y
        improve y = (y + x / y) / 2

a, b :: Double
a = 2
b = 12345
main :: IO ()
main = do
  print (Main.sqrt a)
  print (sqrt' a)
  print (Main.sqrt b)
  print (sqrt' b)

入出力結果(Terminal, ghci, runghc)

$ runghc sample6.hs
1.4142156862745097
1.4142156862745097
111.10805770848404
111.10805770848404
$

0 コメント:

コメントを投稿