Если еще не удалось выполнить проверку в программе - PullRequest
0 голосов
/ 18 июня 2020

В моей программе есть следующий раздел:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main ()
{
   double a, b, c, check;
   check = (pow(a,2) + pow(b,2) + pow(c,2));

   if (check !=1 )
   {
        printf("a^2+b^+c^2 = %f, and is not equal to 1\n", check);
        printf("do something\n");
   }
   else
   {
        //conginue with something
   }
}

Когда я запускаю программу, условие if else не выполняется, даже если значение check равно 1.

Я получаю следующее сообщение:

Значение a ^ 2 + b ^ 2 + c ^ 2 равно 1.000000 и не равно 1.

Я пытался сделать это с помощью

if (check !=1.000000 )

и все равно результат тот же.

Кто-нибудь может мне помочь с этим?

1 Ответ

3 голосов
/ 18 июня 2020

Я предполагаю, что значения a, b, c - десятичные числа с несколькими цифрами. Например: если все a, b, c равны 0,577350269189626, результат будет «почти» 1,00000

Но может быть небольшая разница, например 1,0000000000001

Сравнение двойной точности числа против точных значений небезопасно. Может быть, лучше иметь какое-то значение точности, например:

double precision = 0.00001;

Тогда вы можете выполнить безопасное сравнение:

if (abs(check - 1.0000) > precision)
{
    // not equal to 1 at all
}
else 
{
    // almost equal to 1
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...