テイラー展開によるネイピア数
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