Почему это условие не выполняется? - PullRequest
0 голосов
/ 11 мая 2018
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, условие не выполняется. в чем проблема !!

1 Ответ

0 голосов
/ 11 мая 2018

Это характер представления с конечной точностью.

Я буду использовать аналогию с десятичным представлением с фиксированной точностью. Вы представляете 1/3 как 0.333333 и 2/3 и 0.666667. Так что если вы сделаете 2/3 - 1/3 - 1/3, результат будет 0.000001. Вы, вероятно, отобразите это как 0.000, так как больше нет смысла отображать больше цифр. Но это не совсем равно нулю.

Не сравнивайте числа с плавающей запятой таким образом, потому что ответ изменится с да на нет даже с малейшей неточностью. Если вы хотите написать функцию «очень, очень близко к», сделайте это.

...