我有一个代码,它接受输入 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。
您可以使用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)
| 归档时间: |
|
| 查看次数: |
1723 次 |
| 最近记录: |