Hatena::ブログ(Diary)

みずぴー日記 Twitter

2010-03-21(日)

テイラー展開によるネイピア数

| テイラー展開によるネイピア数を含むブックマーク

30分プログラム、その743。Haskellテイラー展開によるネイピア数を求めてみる。

mixiの課題コミュインスパイアされています。

数値に関する型クラスがよく分からなくて、A Gentle Introduction to Haskell: Numbersを読みながらやってました。とりあえず浮動小数っぽいのをFloatingに、整数っぽいのをIntegralにしてみました。これでいいよね?

使い方

*Main> e !! 100
2.7182818011463845
*Main> e !! 100
2.7182818284590455

ソースコード

import Data.Ratio
myExp  :: Floating a => a -> [ a ]
term :: (Floating a, Integral b) => a -> b -> a
fact :: Num a => a -> a

fact 0 = 1
fact n = n * fact (n - 1)

term x n = (x ** n') / (fact n')
    where n' = fromRational ((toInteger n) % 1)

myExp x = scanl1 (+) $ map (term x) [0..]

e = myExp 1

参考

トラックバック - http://d.hatena.ne.jp/mzp/20100321/e