Возможный дубликат:
Как мне сделать сравнение с плавающей запятой?
это фрагмент кода, и я не могу понять, что с ним не так.
Оператор if оценивает числа неправильно и собирается перейти к «else».
double m,k;
m = (y3-y1)/(x3-x1);
k = m*(-x1)+y1;
cout <<"\n\n"<< m <<" "<< k << "\n";
cout <<"\n\n"<< ((-a)/b) <<" "<< c/b << "\n";
if(m==((-a)/b) && k==c/b)
{
cout << "\nTaisne sakrīt ar kādu no trīsstūra malām!" << endl;
goto beigas;
}
else
cout << "\n\n WRONG \n\n";
Пользователь вводит значения x1, y1, x3, y3, a, b, c — все они двойной.
Вроде нормально работает только с «м». И странно, что когда я попробовал следующее, оператор if был верным с теми же значениями:
if(m==((-a)/b) && k<c/b)
Вот скриншот, чтобы получить всю проблему:
Код начинается после того, как пользователь ввел все значения.
Спасибо, любая помощь будет принята с благодарностью!
когда вы хотите сравнить две плавающие точки, используйте такой порог:
double m = a/b;
if (abs(m - (a/b)) < 0.0001)
{
// execute code where m == a/b here
}
поэтому, в основном, сравнивайте числа с плавающей запятой / вычитайте их дважды и убедитесь, что результат меньше определенного порога.
Других решений пока нет …