所以我编写了两个函数来计算变量x的自然对数,在将增量和的上限增加到33000后,函数仍然返回在ghci中测试的不精确结果,与从Prelude导入的默认日志函数相比,这里是代码定义:
lnOfx :: Float -> Float
lnOfx x = netSum f 1 33000
where f i = 2*(1/oddTerm)*((x-1)/(x+1))**oddTerm
where oddTerm = 2*i-1
netSum f minB maxB = sum [f i | i <- [minB .. maxB]]
lnOfx2 :: Float -> Float
lnOfx2 x = netSum f 1 33000
where f i = (1/i)*((x-1)/x)**i
netSum f minB maxB = sum [f i | i <- [minB .. maxB]]
Run Code Online (Sandbox Code Playgroud)
测试结果如下:
log 3
1.0986122886681098
lnOfx 3
1.0986125
lnOfx2 3
1.0986122
log 2
0.6931471805599453 …Run Code Online (Sandbox Code Playgroud)