if (ABC == plotsum) ... Negalima taip lyginti dviejų slankiojo kablelio skaičių. double yra riboto tikslumo ir kai kuriais atvejais atlikęs veiksmus gauna ne tikslų skaičių, bet labai jam artimą. Pavyzdžiui, pabandyk atspėti, ką atspausintų toksai kodo fragmentas:
double sqrt2 = sqrt(double(2));
if (sqrt2 * sqrt2 == double(2)) {
cout << "2 == 2";
}
else {
cout << "2 =/= 2";
} Ogi atspausdina "2 =/= 2", nes kai ištrauki šaknį iš 2, gauni skaičių su daug skaitmenų po kablelio, kuris yra gana arti √2, bet šiek tiek skiriasi. Kai vėl viską pakeli kvadratu, gauni skaičių, kuris yra labai arti prie 2, bet ne 2.
Va kaip reikia tikrinti, ar du slankaus kablelio skaičiai yra lygūs:
const double EPS = 1e-6;
double sqrt2 = sqrt(double(2));
if (fabs(sqrt2 * sqrt2 - double(2)) < EPS) {
cout << "2 == 2";
}
else {
cout << "2 =/= 2";
} Šiuo atveju nusistatai tolerancijos ribą EPS ir tikrini, ar abu skaičiai skiriasi ne daugiau kaip per EPS. Jei šie skaičiai pakankamai arti vienas kito, tiesiog laikai, kad jie lygūs.
Turiu,minusas toks kad baterija integruota. O ir pleveles kurios prideda nera geros kokybes, toliau viskas kaip ir gerai. Puikiai atlieka savo paskirti :)