-3

如果我有这样的事情:

double a = 1.0f;
double b = 1.0f;
double c = 1.0f;
double d = 1.0f;

a /= 3.0f;    // 0.3333...
b /= 3.0f;
c /= 3.0f;

if ((a+b+c) == 1)
    puts("sum equals 1");
if (3*a == 1)
    puts("product equals 1");
if (d == 1)
    puts("d equals 1");

不出所料,只有第三个执行。如果一些自变量之和正好等于 1,是否有一种简单的方法来执行代码?

编辑:我真的知道为什么 (1/3.0) + (1/3.0) + (1/3.0) 不是 1。但我不知道另一种方式来问它。

4

1 回答 1

0

尝试打印 a+b+c 以及 a+b+c-1 并比较结果。您会注意到 a+b+c-1 的结果并不完全是 0。这始终是一个问题,因为浮点运算不能提供无限精度。

一种可能的解决方案是测试 abs(a+b+c-1) 是否小于某个阈值。另一种解决方案是切换到没有浮点的实现,例如使用分子、分母的表示。另一种解决方案是实现区间算术并检查结果中是否包含零。

在您的情况下,最佳解决方案取决于您实际想要实现的目标。

于 2013-02-16T07:53:35.930 回答