printf("Elements of vector U:n");
rprint_vector(u, n);
double vt = dasum_(&n, u, &incx);
printf("vt = %lfn", vt);
if (vt == 0)
printf("yes vt = 0n");
else
printf("No vt != 0n");
结果:
Elements of vector U:
------------
0.000000
0.000000
-0.000000
0.000000
------------
vt = 0.000000
No vt != 0
即使变量 vt 等于 0,也不满足条件。 问题出在哪里!!
这就是有限精度表示的本质。
我将使用固定精度十进制表示的类比。您将 1/3 表示为0.333333
和 2/3 和0.666667
。所以如果你这样做2/3 - 1/3 - 1/3
,结果将是0.000001
。您可能会将其显示为0.000
,因为显示更多数字没有多大意义。但它并不完全等于零。
不要以这种方式比较浮点数,因为答案会从是切换到否,即使是最轻微的不精确。如果你想写一个"非常非常接近"的函数,那就这样做吧。