안녕하십니까! 오늘도 어김없이 글을 쓰는 BlockDMask 입니다.
오늘은 내림(floor)함수와 비슷하다고 생각할 수 있는 버림(trunc)함수에 대해서 슬쩍 살펴보겠습니다.
C++11에서부터 사용가능하다는 점 알려드립니다.
(C언어/C++ floor(내림), ceil(올림) 함수에 대한 포스팅. [바로가기])
(C++ round(반올림) 함수에 대한 포스팅. [바로가기])
1. C++ trunc 버림함수 함수 원형과 함수 설명
▼ trunc 함수
헤더파일 : <cmath>
함수원형1 : float trunc(float num);
함수원형2 : double trunc(double num);
함수원형3 : long double trunc(long double num);
함수원형4 : double trunc(T num);
함수설명 : 소수점 아래 수는 0으로 바꾸어 버리는 함수 입니다. 아예 버려버리는거죠. 가차없는 함수입니다. 아주 잔인한 함수에요.
(trunc 함수는 truncate 라는 단어로부터 온 것 입니다.)
(C++11부터 사용이 가능합니다.)
(C++에서는 함수 오버로딩(overloading)이 가능하기 때문에 매개변수로 들어오는 타입, 개수가 다르면 같은이름의 함수를 사용할 수 있습니다.)
(또한, 함수원형 네번째에 나와있는 T가 궁금하시다면 [바로가기])
▼ 간단하게 trunc 함수 작동을 보겠습니다.
양수 살펴보겠습니다.
trunk(3.2)는 -> 3이 반환되고
trunk(3.7)은 -> 3이 반환되겠죠?
음수 살펴보겠습니다.
trunk(-3.2)는 바로 -> -3이 반환.
trunk(-3.7)은 바로 -> -3이 반환됩니다.
참 쉽죠?
아래에는 두가지 예제가 있습니다.
하나는 trunk함수 예제가 있고,
다른 하나는 올림(ceil),내림(floor),버림(trunc),반올림(round)함수 결과를 비교해 놓은 것 입니다.
얼핏보면 버림이 내림과 다를바 없다고 생각할 수 있는데, 전혀 never 같지 않습니다.
2. C++ trunc 버림함수 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //C++ trunk example. //BlockDMask #include<iostream> //cout #include<cmath> //round, ceil, floor, trunc using namespace std; int main(void) { double a1 = 3.2; double a2 = 3.7; double a3 = -3.2; double a4 = -3.7; cout << "[C++] trunc example. BlockDMask" << endl; cout << "trunc(3.2) : " << trunc(a1) << endl; cout << "trunc(3.7) : " << trunc(a2) << endl; cout << "trunc(-3.2) : " << trunc(a3) << endl; cout << "trunc(-3.7) : " << trunc(a4) << endl; cout << endl; system("pause"); return 0; } | cs |
▲ trunc 함수 예제 결과
앞서 말씀드린 것 처럼 소수점 뒤에 있는것들을 가차 없이 버리는 잔인한 함수임을 볼 수 있습니다.
3. C++ trunc, ceil, floor, round (버림, 올림, 내림 반올림) 함수 비교
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 31 32 | //C++ ceil, floor, round, trunk example. //BlockDMask #include<iostream> //cout #include<cmath> //round, ceil, floor, trunc using namespace std; int main(void) { double a1 = 3.2; double a2 = 3.7; double a3 = -3.2; double a4 = -3.7; cout << "[C++] round example. BlockDMask" << endl; cout << "origin\t round\t ceil\t floor\t trunc" << endl; cout << " 3.2\t " << round(a1) << "\t " << ceil(a1); cout << "\t " << floor(a1) << "\t " << trunc(a1) << endl; cout << " 3.7\t " << round(a2) << "\t " << ceil(a2); cout << "\t " << floor(a2) << "\t " << trunc(a2) << endl; cout << " -3.2\t " << round(a3) << "\t " << ceil(a3); cout << "\t " << floor(a3) << "\t " << trunc(a3) << endl; cout << " -3.7\t " << round(a4) << "\t " << ceil(a4); cout << "\t " << floor(a4) << "\t " << trunc(a4) << endl; cout << endl; system("pause"); return 0; } | cs |
▲ round, ceil, floor, trunc 함수 비교 결과
반올림은 그렇다 치고,
양수일때 ceil 값과 trunc 값이 다릅니다.
음수일때 floor 값과 trunc 값이 다릅니다.
위 예제에서 사용한
C언어/C++ floor(내림), ceil(올림) 함수가 궁금하다면? [바로가기]
C++ round(반올림) 함수가 궁금하다면? [바로가기]
감사합니다. BlockDMask 기억해주시고, 또오세요~
'<개인공부> > [C++]' 카테고리의 다른 글
[C++] 파일입출력(ofstream, ifstream)에 대해서. (2) | 2019.11.18 |
---|---|
[C++] reverse 문자열을 거꾸로 하는 함수에 대해서 (0) | 2019.11.13 |
[C++] string 클래스, 문자열에 대해서 (총정리) (39) | 2019.03.29 |
[C++] range based for, 범위기반 for 반복문에 대해서. (1) | 2019.03.25 |
[C++] round 반올림 함수에 대해서. (1) | 2019.03.19 |
[C++] to_string 함수에 대해서 (int to string) (4) | 2019.03.17 |
[C++] stoi, stof, stol, stod 함수에 대해서 (string to int) (4) | 2019.03.16 |
[C++] array container 정리 및 사용법 (std::array) (4) | 2019.03.15 |