C语言 为什么不满足此条件?


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,因为显示更多数字没有多大意义。但它并不完全等于零。

不要以这种方式比较浮点数,因为答案会从是切换到否,即使是最轻微的不精确。如果你想写一个"非常非常接近"的函数,那就这样做吧。

相关内容

  • 没有找到相关文章

最新更新