Если утверждение — неверная оценка

Возможный дубликат:
Как мне сделать сравнение с плавающей запятой?

это фрагмент кода, и я не могу понять, что с ним не так.

Оператор 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)

Вот скриншот, чтобы получить всю проблему:

http://i49.tinypic.com/307n88l.jpg

Код начинается после того, как пользователь ввел все значения.

Спасибо, любая помощь будет принята с благодарностью!

2

Решение

когда вы хотите сравнить две плавающие точки, используйте такой порог:

double m = a/b;

if (abs(m - (a/b)) < 0.0001)
{
// execute code where m == a/b here
}

поэтому, в основном, сравнивайте числа с плавающей запятой / вычитайте их дважды и убедитесь, что результат меньше определенного порога.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector