1
printf("Elements of vector U:\n");
rprint_vector(u, n); 
double vt = dasum_(&n, u, &incx);
printf("vt = %lf\n", vt);

if (vt == 0)
    printf("yes vt = 0\n");
else
    printf("No vt != 0\n");

结果 :

Elements of vector U:
------------
0.000000
0.000000
-0.000000
0.000000
------------
vt = 0.000000
No vt != 0

即使变量 vt 等于 0,条件也不满足。问题出在哪里!!

4

1 回答 1

2

这是有限精度表示的本质。

我将使用固定精度十进制表示进行类比。你代表 1/30.333333和 2/3 和0.666667。所以如果你这样做2/3 - 1/3 - 1/3了,结果会是这样0.000001。您可能会将其显示为0.000,因为显示更多数字没有多大意义。但它并不完全等于零。

不要以这种方式比较浮点数,因为即使是最不精确的答案也会从“是”变为“否”。如果你想写一个“非常非常接近”的函数,那就去做吧。

于 2018-05-11T20:46:45.443 回答