1

在 linux x86_64 上的 C++ 代码中,我需要双精度计算(+ 或 -)。

26.100000000000001 - 26 + 0.10000000000000001

我有:

0.20000000000000143

我想得到0.2。

这里,显示格式不导入,计算结果将用于一些if-else分支条件。所以,我只希望 if-else 条件比较小数位后的 4 位数字。

这似乎是一个四舍五入的错误?

如何将计算精度限制为小数点后 4 位?

我不想调用任何函数以避免开销。

由于转换开销,我不想使用 stringstream。

有更好的主意吗?

谢谢

4

3 回答 3

8

计算精度很好。这是您要控制的显示精度。您可以使用setprecision()if using<iostream>或像"%.4f"if using之类的格式化程序来做到这一点<stdio.h>

您已经在调用函数,因为您将结果显示为十进制!

PS0.1不能用 , 或任何二进制尾数格式精确float表示double。它包含(1/2) * (1/5),而十进制1/5是二进制中无限重复的数字序列。

PPS 去看看GMP。这可能是你最大的希望。

于 2011-12-25T18:48:27.690 回答
2

如果你只想打印它,你可以使用 printf("%10.4lf")。当然,您可以将精度更改为您想要的任何内容。

于 2011-12-25T18:47:38.453 回答
1

如果您只对小数点后四位的相等性感兴趣,请将所有内容乘以 10,000 并使用整数算术。(乘以 10,000 后可能需要四舍五入。)

于 2011-12-26T01:40:49.260 回答