안녕하세요. BlockDMask 입니다.
오늘은 절대값을 구할 수 있는 절대값 함수 abs에 대해서 알아보려고 합니다.
<목차>
1. C 언어에서의 abs, fabs 함수 (헤더파일과 함수 원형)
2. C++에서의 std::abs 함수 (헤더파일과 함수 원형)
3. C언어 abs, fabs 함수 예제
4. C++ std::abs 함수 예제
1. C 언어에서의 abs, fabs 함수 (헤더파일과 함수 원형)
절대값 함수는 특이하게도 abs가 있는 헤더와 fabs가 존재하는 헤더파일이 다릅니다.
▼ C언어 abs 함수
헤더파일 : <stdlib.h>
함수원형 : int abs(int num);
함수설명 : 인자로 들어온 int 타입의 num의 절대값을 반환하는 함수
▼ C언어 fabs 함수
헤더파일 : <math.h>
함수원형 : double fabs(double num);
함수설명 : 인자로 들어온 double 타입의 num의 절대값을 반환하는 함수
위에서 보시는것처럼 abs 함수는 stdlib.h에 존재하고, fabs 함수는 math.h에 존재합니다.
2. C++에서의 std::abs 함수 (헤더파일과 함수 원형)
C++에서는 함수 오버로딩(overloading)이 존재하기 때문에 abs 함수 이름 하나만 존재하지만,,,
이게 좀 이상합니다.
int 타입의 정수 절대값 함수(abs)의 오버로딩은 <cstdlib>에 존재하고,
float, double 타입의 실수 절대값 함수(abs)의 오버로딩은 <cmath>에 존재합니다.
아무래도 C언어와 C++의 호환성을 위해서,
C언어에서 정수관련 절대값 함수 abs를 <stdlib.h>에 선언을 했기때문에 여기서는 C++ 스타일 정수 타입 abs함수 오버로딩을 하고,
C언어에서 실수관련 절대값 함수 fabs 함수는 <math.h>에 선언이 되어있기 때문에 이걸 C++ 스타일 실수형태 abs 함수화 한 것 으로 추측 됩니다.
그리고 <cmath> 헤더에 fabs 도 있습니다. 하지만, <cmath>헤더에 있는 abs와 fabs 둘다 동일하다는 말씀. 이것도 C언어와의 호환성을 위해 남겨둔것으로 추측됩니다.
▼ C++ abs 함수1
헤더파일 : <cstdlib>
함수원형1 : int abs(int num);
함수원형2 : long int abs(long int num);
함수원형3 : long long int abs(long long int num);
함수설명 : 인자로 들어온 정수타입에 맞는 abs 함수가 불리게 되고, 정수로 들어온 수(num)는 절대값으로 바꾸어서 반환 됩니다.
▼C++ abs 함수2
헤더파일 : <cmath>
함수원형1 : double abs(double num)
함수원형2 : float abs(float num)
함수원형3 : long double abs(long double num)
함수원형4 : double abs(T x);
함수설명 : 인자로 들어온 실수 타입에 맞는 abs 함수가 불리게 되며, 인자로 넣은 데이터 타입과 동일한 데이터 타입의 절대값을 반환하는 함수.
(함수원형4에 존재하는 T가 무엇인지 궁금하다면 template [바로가기])
3. C언어 abs, fabs 함수 예제
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 | //C abs(), fabs() example //BlockDMask #include<stdio.h> #include<stdlib.h> //abs() #include<math.h> //fabs() int main(void) { int num1 = -31; int num2 = 21; double num3 = -34.56; double num4 = -14.21; printf("[C abs(), fabs() example]\n"); //int type abs() printf("abs(- int) : %d\n", abs(num1)); printf("abs(+ int) : %d\n", abs(num2)); //double type fabs() printf("fabs(- double) : %f\n", fabs(num3)); printf("fabs(+ double) : %f\n", fabs(num4)); printf("\n"); system("pause"); return 0; } | cs |
▲C언어 abs, fabs 예제 결과
4. C++ std::abs 함수 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //C++ abs example //BlockDMask #include<iostream> #include<cmath> //abs for float, double #include<cstdlib> //abs for int, long int using namespace std; int main(void) { int a1 = -1111; int a2 = 1000; float b1 = -22.22f; float b2 = 20.22f; cout << "[C++ abs() example]" << endl; cout << "abs(- int) : " << abs(a1) << endl; cout << "abs(+ int) : " << abs(a2) << endl; cout << "abs(- float) : " << abs(b1) << endl; cout << "abs(+ float) : " << abs(b2) << endl; cout << endl; system("pause"); return 0; } | cs |
▲C++ abs 예제 결과
감사합니다. 또 오세요~
'<개인공부> > [C언어, C++]' 카테고리의 다른 글
[C언어/C++] gets, puts 문자열 입출력 함수에 대해서. (4) | 2019.04.15 |
---|---|
[C언어/C++] getchar,putchar 문자 입출력 함수에 대해서. (1) | 2019.04.04 |
[C언어/C++] 팩토리얼 재귀, 반복문 구하기 (factorial 함수) (2) | 2019.04.02 |
[C언어/C++] 로그함수(log, log10) 대해서. (9) | 2019.03.22 |
[C언어/C++] atoi, atof, atol 함수 (char* to int) (13) | 2019.03.14 |
[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 |