본문 바로가기
2_ 바삭바삭 프로그래밍/C and C++

C - math.h 일부 (pow, sqrt, floor, ceil)

by 준환이형님_ 2011. 9. 19.

제곱을 사용할 때마다 입에 빙빙 돌아서 스크랩합니다.

간혹 올림, 내림 할일이 있으면 10나눈뒤 다시 10곱하는 방법을 썼는데.. 이게 다 함수로 있었군요 -_-;; 



출처 : http://211.228.163.31/30stair/floor_ceil/floor_ceil.php#power

1. xy 구하기

2, 3 4 ...등의 거듭제곱 값은 pow 함수로 구할 수 있습니다.

다음은 pow 관련 함수의 메뉴얼 입니다.

pow , powf ,powl 함수를 사용하기 위해서는 math.h 를 포함시켜야 하고 함수의 원형(prototype)이 주어져 있습니다.

이 중 pow 함수의 원형을 설명하면 ,

  • pow 함수는 두 수를 인자로 받고
  • xy한 수를 구해서 돌아 옵니다.
인자로 주는 두 수는 double 형이어야 합니다. 만약 정수 값으로 인자로 줄 경우에는 cast 연산자를 사용하여 형 변환을 해 주는 것이 안전한 사용 법 입니다.
pow((double)a,(double)b); //a,b 가 정수형 변수 일 때
구한 값을 출력하거나 변수로 받을 때 정수 값(변수)으로 돌려 받기 위해서는 마찬가지로 형 변환을 해 주고 , 실수(double 형)으로 받을 때 는 그대로 사용하면 됩니다.
  • printf("%d",(int)pow((double)a,(double)b); //결과를 정수로 출력
  • printf("%.2lf",pow((double)a,(double)b); // 구한 값을 double 형으로 소수이하 두자리 까지 출력
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <math.h>
 
int main()
{
   int x,y;
 
   x=2;
   y=3;
   printf("%d\n",(int)pow(double(x),double(y))); // 2^3
 
   x=3;
   y=4;
   printf("%d\n",(int)pow(double(x),double(y))); //3^4
 
   x=2;
   printf("%.3lf\n",pow(double(x),0.5)); //√2 를 소수 세자리 
}

2. sqrt(x)

방정식 x*x = 4 을 근은 x = 2 혹은 x = -2 입니다.

를 만족하는 근을 특별히 거듭제곱 근이라 한다. 거듭 제곱근에는 양의 제곱근,음의 제곱근이 있습니다. 이 경우 x =2 가 양의 거듭제곱근이고 , x=-2 가 음의 거듭 제곱근입니다. 가 되는 x 는 x= 2 혹은 x= -2 입니다.

이 때 x 가 양수인 2 를 √4 라고 합니다.

√4 = 2
몇 가지 √ 값을 보면
   √1 = 1
   √4 = 2
   √9 = 3
   √16 = 4
   ...
   
√3 은 얼마일까요? 대충 1.xxxx 가 되리라는 것은 추측 할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <math.h>
 
int main()
{
   double a;
 
   a =3.0;
   printf("%lf",sqrt(a));
}
정수 값을 대입 후 정수 값으로 출력하기 위해서는 sqrt 함수는 받는 값이 double , 돌려 주는 값도 double 형이라 다음과 같이 cast 연산자를 사용하면 됩니다.
?
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <math.h>
 
int main()
{
   int a;
 
   a =4;
   printf("%d",(int)sqrt((double)a));
}

3. floor(x)

그림과 같이 경사진 곳에 구슬을 둔다고 생각합니다.

  • 2 와 3 사이에 구슬을 놓으면 2 번 구멍에 빠지고 ,
  • -3 과 -2 사이에 구슬을 놓으면 -3 번 구멍에 빠지고 ,
  • 2 에 구슬을 놓으면 2 번 구멍,
  • -3 에 놓으면 -3 번에 빠집니다.
이 함수를 gauss 함수라고 하고 , 기호  혹은 [x] 로 표현 합니다.

즉  는 x 보다 크지 않는 최대 정수입니다. "x 보다 크지 않다"입니다. 같아도 상관 없습니다.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <math.h>
 
int main()
{
   printf("%lf\n",floor(2.3));
   printf("%lf\n",floor(2.8));
   printf("%lf\n",floor(2.0));
   printf("%lf\n",floor(-2.3));
   printf("%lf\n",floor(-2.8));
   printf("%lf\n",floor(-2.0));
}

4. ceil(x)

그림과 같이 경사진 곳에 구슬을 둔다고 생각합니다.

  • 2 와 3 사이에 구슬을 놓으면 3 번 구멍에 빠지고 ,
  • -3 과 -2 사이에 구슬을 놓으면 -2 번 구멍에 빠지고 ,
  • 2 에 구슬을 놓으면 2 번 구멍,
  • -3 에 놓으면 -3 번에 빠집니다.

즉  는 x 보다 작지 않는 최소 정수입니다. "x 보다 작지 않다"입니다. 같아도 상관 없습니다.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <math.h>
 
int main()
{
   printf("%lf\n",ceil(2.3));
   printf("%lf\n",ceil(2.8));
   printf("%lf\n",ceil(2.0));
   printf("%lf\n",ceil(-2.3));
   printf("%lf\n",ceil(-2.8));
   printf("%lf\n",ceil(-2.0));
}