小编Leo*_*ngo的帖子

在Haskell中使用系列的自然对数给出了不精确的结果

所以我编写了两个函数来计算变量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)

math haskell libm

1
推荐指数
1
解决办法
125
查看次数

标签 统计

haskell ×1

libm ×1

math ×1