eig*_*irt 5 floating-point precision printf haskell number-formatting
我有一个简单的代码来读取浮点数并以六位小数打印它。
我的 C 代码可以工作,我想制作一个与 Haskell 语言相同的代码,而不需要安装任何额外的库。
我的解决方案在 C 和 Haskell 中非常简单:
C:
#include <stdio.h>
int main() {
float n = 123.141568;
printf("%.6f\n", n); // 123.141571
return 0;
}
Run Code Online (Sandbox Code Playgroud)
哈斯克尔:
import Text.Printf (printf)
main = do
let n = 123.141568 :: Float
printf "%.6f\n" n -- 123.141570
Run Code Online (Sandbox Code Playgroud)
这些代码对于大多数数字都可以正常工作,但有一些不同的结果。例如,当n = 123.141568C 程序输出123.141571而 Haskell 程序输出123.141570. 如果我在 Haskell 中从 改为 ,Float结果Double是123.141568。
我的目标是让我的 Haskell 代码等于 C。我意识到即使在两种语言中使用 printf,舍入方法也是不同的,但我不知道这是如何发生的。
Float我尝试制作自定义舍入函数,但结果与(在上面的示例中123.141570)和Double(123.141568)相同:
customRound x n = fromIntegral (round (x * 10^n)) / 10^n
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题有什么想法吗?
提前致谢!
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |