안녕하세요 BlockDMask 입니다.
오늘은 올림, 내림 을 할수있는 ceil, floor 함수에 대해서 알아보고.
floor 함수를 통해서 반올림을 하는 것 까지 보도록 하겠습니다.
C의 함수들이 C++에 호환이 되어서 C에서 쓸때와 C++에서 쓸때의 차이점은
헤더파일,
메서드 오버로딩 (메서드, 함수 이름이 같아도 인자가 다르면 선언이 되는것) 이 있습니다.
오버로딩은 C++에서만 지원합니다.
글 순서는
헤더파일 소개 -> 함수(메소드)가 선언된 원형과 사용법 -> 실제 예시 -> + 알파 순으로 가겠습니다.
그럼 시작하겠습니다.
(C++ 반올림(round)함수 포스팅 [바로가기])
(C++ 버림(trunc)함수 포스팅 [바로가기])
0. 헤더파일(header)
[C 언어] : <math.h>
[C++] : <cmath>
1. 함수 원형과 사용법
[C언어] : C언어는 함수 오버로딩을 지원하지 않으므로 double 타입으로만 존재합니다.
double ceil(double n);
double floor(double n);
[C++] : C++에서는 method 이름이 달라도 method를 선언할 수 있는 오버로딩을 지원합니다.
double ceil (double x);
float ceil (float x);
long double ceil (long double x);
double floor (double x);
float floor (float x);
long double floor (long double x);
사용법
- 올림 함수 : ceil()
ex) result = ceil(4.2);
-> result = 5.0 - 내림 함수 : floor()
ex) result = floor(4.2);
-> result = 4.0
- 내림함수 floor()를 이용한 반올림 함수 구현
-> floor(N)에 N값에 0.5를 더해서 사용하면 됩니다.
-> floor(N + 0.5); //반올림이 됩니다!
ex1) floor를 통해서 4.2의 반올림을 구해보자.
result = floor(4.2 + 0.5); -> 내부 값 4.7이 되므로 -> floor를 통해서 내림을 하게되면
-> result = 4.0 가 나옵니다.
:: 결론적으로 "4.2의 반올림 = 4.0"이 되므로 floor() 함수를 통해서 반올림 구현 성공
ex2) floor함수를 통해서 4.7의 반올림을 구해보자.
result = floor(4.7 + 0.5); -> 내부 값 5.2 가 되므로 -> floor를 통해서 내림을 하게되면
-> result = 5.0 가 나옵니다.
:: 결론적으로 "4.7의 반올림 = 5.0"되 므로 floor() 함수를 통해서 반올림 구현 성공
2. 예시
T1) [C언어] 양수일때
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include<stdio.h> #include<math.h> int main(void){ //양수 double n1 = 4.2; double n2 = 4.2; double n3 = 4.2; double n4 = 4.7; //올림 printf("%0.1lf\n", ceil(n1)); //내림 printf("%0.1lf\n", floor(n2)); //반올림 printf("%0.1lf\n", floor(n3 + 0.5)); printf("%0.1lf\n", floor(n4 + 0.5)); return 0; } | cs |
>결과
T2) [C++] 음수일때
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 | #include<iostream> #include<cmath> using namespace std; int main(void){ //음수 double n1 = -4.2; float n2 = -4.2; double n3 = -4.2; float n4 = -4.7; //소수점 출력. cout.setf(ios::fixed, ios::floatfield); //소수점 아래 1자리 까지 cout.precision(1); //올림 cout << ceil(n1) << endl; //내림 cout << floor(n2) << endl; //반올림 cout << floor(n3 + 0.5) << endl; cout << floor(n4 + 0.5) << endl; return 0; } | cs |
>결과
**추가지식
3. 반올림 함수(메소드) : round
- 사실 반올림 함수 round가 있습니다. 하지만 C++11에서 지원을 하기 때문에, 지원안되시는 분들이 있을까봐 반올림은 floor 함수를 이용하여 구하는 방법을 소개했습니다.
(C++ round 반올림 함수 포스팅 [바로가기])
(C++ trunc 버림 함수 포스팅 [바로가기])
<참고>
http://www.cplusplus.com/reference/cmath/floor/
http://www.cplusplus.com/reference/cmath/ceil/
감사합니다.
도움되셨다면 공감버튼 한번 부탁드립니다.
'<개인공부> > [C언어, C++]' 카테고리의 다른 글
[C언어/C++] rand, srand, time 랜덤함수에 대해서 (난수생성) (37) | 2019.01.11 |
---|---|
[C언어/C++] pow, sqrt 함수에 대해서(루트함수, 제곱, 제곱근) (4) | 2019.01.04 |
[C언어] 동적할당 정리2 (malloc, free 예제) (3) | 2018.10.31 |
[C언어/C++] assert 함수에 대해서 : 디버깅을위한, 더 안전한 코드를 위한 오류 검출 방법 (2) | 2018.10.24 |
[C언어/C++] define 매크로와 inline 함수에 대해서 (3) | 2017.11.03 |
[C언어/C++] clock 함수를 통한 알고리즘 시간 측정 (0) | 2017.10.19 |
[C언어] 배열포인터, 포인터배열 정리 (pointer) (19) | 2017.07.14 |
[C언어] 동적할당 정리1 (malloc, realloc, calloc, free 함수) (0) | 2017.07.10 |