wellcome_공부일기

C++ | 03.05 관계 연산자(Relational operator) 본문

프로그래밍/C++

C++ | 03.05 관계 연산자(Relational operator)

ma_heroine 2020. 5. 17. 18:03

<목차>

1. 관계연산자(Relational operator)

2. 주의 사항과 코드 예시

 

관계 연산자(Relational operator)

두개의 피연산자의 사이를 정의하는 연산자로 '=='은 비교, '!='은 같지 않음 등의 관계를 나타낼 수 있습니다.

실전에서는 두 숫자 중 무엇이 더 크고 같냐, 다르냐를 다루지만, 부동 소수점 혹은 서로의 차이를 알려주는 코드에서 문제가 발생할 수 있습니다. 

 

기본 코드 

#include <iostream>
using namespace std;



int main()
{
    while (true)
    {
        int x, y;
        cin >> x >> y;
        cout << "Your input values are : " << x << " " << y << endl;

        if (x == y) 
            cout << "equal" << endl;
        if (x != y)
            cout << "Not equal" << endl;
        if (x > y)
            cout << "x is greater than y" << endl;
        if (x < y)
            cout << "x is less than y" << endl;
        if (x >= y)
            cout << "x is greater than y or equal to y" << endl;
        if (x <= y)
            cout << "x is less than y or equal to y" << endl;
    }

   return 0;

}

- while(true)일 경우, 아래의 코드가 계속 반복됩니다.

- =이 하나이면 대입, ==이면 비교 연산자 입니다. 

 

 

주의사항과 코드 예시

- 부동소수점끼리 비교할 때, 문제가 생길 수 있습니다. 

#include <iostream>
using namespace std;



int main()
{
    double d1(100 - 99.99); //0.001 전강의에서 어떻게 그 차이를 알수 있는지 찍어서 나오는 방법
    double d2(10 - 9.99); //0.001

    cout << d1 << endl;
    cout << d2 << endl;

    if(d1==d2)
        cout << "equal" <<endl;
    else
   {
        cout << "not equal" << endl;

        if (d1 > d2) cout << "d1 > d2" << endl;
        else//if (d1 > d2) because d1 != d2
            cout << "d1 < d2" << endl;
    }

   return 0;
}
//0.01
//0.01
//not equal
//d1 > d2

- d1, d2는 0.01이라는 값을 가집니다.

- 하지만 미세한. 소수점 값으로 이 둘은 같지 않다고('not equal') 출력됩니다.

- 위 코드를 따라 관계 연산자로, d1과 d2의 값을 추적해보면, d1이 d2보다 크다는 것을 알 수 있습니다.

 

 

- 서로의 차이를 알기 위한 코드 

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double d1(100 - 99.99); 
    double d2(10 - 9.99); 

    cout << std::abs(d1-d2)<< endl;


    const double epsilon = 1e-10;

    if(std::abs(d1-d2) < epsilon)
        cout << "Approximately equal" << endl;
    else
        cout << "Not equal" << endl;


   return 0;
}

- d1과 d2의 차이는 5.32907e-15로, 아주 작은 차이의 숫자입니다. 

- 이렇게 작은 차이는 우리가 그냥 넘어가줬으면 좋겠다 싶을 때, 기준을 제시하여 비교 연산자를 사용해 관계를 출력해줍니다. 

- epsilon이 1e-10보다 작으면, 거의 같다("Approximately equal")을 출력해주고 그보다 크면 같지 않다("Not equal")을 출력해줍니다.

- 참고로 epsilon을 1e-16으로 대입한다면 "Not equal"이 출력됩니다. 

 

 

 

 

 

 

 

 

* 해당 글은 홍정모님의 따라 배우는 C++을 토대로 공부한 내용을 포스팅했습니다.

Comments