Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 학습 알고리즘
- #define
- 코딩테스트
- #endif
- 홍정모님
- C++
- 단항연산자
- Runtime constants
- Andrew Ng
- classification problem
- const
- Machine Learning
- sizeof()
- algorithm
- standford University
- coursera
- 프로그래밍
- 연산자
- 이코테
- 기계학습
- CLion
- compile time constants
- decimal
- 나동빈님
- 기계학습 기초
- 형변환
- Greedy
- 본즈앤올
- 코드블럭 오류
- regression problem
Archives
- Today
- Total
wellcome_공부일기
C++ | 03.05 관계 연산자(Relational operator) 본문
<목차>
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++을 토대로 공부한 내용을 포스팅했습니다.
'프로그래밍 > C++' 카테고리의 다른 글
C++ | 03.07 이진수(Binary)를 십진수(Decimal)로 바꾸기 (0) | 2020.05.22 |
---|---|
C++ | 03.06 논리 연산자(Logical operator) (0) | 2020.05.18 |
C++ | 03.04 sizeof, 쉼표 그리고 조건(부) 연산자 (0) | 2020.05.16 |
C++ | 03.03 증가/ 감소 연산자(Increment/ Decrement) 주의사항 (0) | 2020.05.15 |
C++ | 03.02 산술 연산자(Arithmetic operator) (0) | 2020.05.14 |
Comments