在 Haskell 中设置精度

use*_*422 4 precision haskell

我有一个代码,它接受输入 T 并后跟 T 行。我想将精度设置为小数点后 12 位。如何提高 Haskell 的精度?

代码:

f i=(-1)**i/(2*i+1) 
g j=show$sum$map f[0..j-1]
p(_:l)=map(g.read)l
main=interact$unlines.p.lines
Run Code Online (Sandbox Code Playgroud)

就像如果输入是:

1
10
Run Code Online (Sandbox Code Playgroud)

然后输出是 0.7604599047323508,但我只想要 0.760459904732。

Lee*_*Lee 5

您可以使用printfText.Printf

printf "%.12f" 0.7604599047323508
Run Code Online (Sandbox Code Playgroud)

printf已重载,因此您需要指定返回类型,但您可以这样做:

showPrec :: Double -> String
showPrec = printf "%.12f"
Run Code Online (Sandbox Code Playgroud)

show那么你可以替换in的使用g

g j = showPrec $ sum $ map f[0..j-1]
Run Code Online (Sandbox Code Playgroud)

如果指定类型,则可以printf直接使用:g

g :: Double -> String
g j = printf "%.12f" $ sum $ map f[0..j-1]
Run Code Online (Sandbox Code Playgroud)