C의 지수
이 기사에서는 C에서 지수화 함수를 사용하는 방법에 대한 여러 가지 방법을 보여줍니다.
C에서 pow
를 지수화 함수로 사용
pow
함수는 C 수학 라이브러리의 일부이며<math.h>
헤더에 정의되어 있습니다. 수학 라이브러리는gcc
컴파일러 도구 모음을 사용할 때 명시 적으로 연결되어야합니다. 컴파일 할 때-lm
플래그를 전달하거나 필요에 따라 해당 빌드 시스템 파일에 포함해야합니다. pow
는 부동 소수점 숫자에 대해서만 정의됩니다. 따라서 최적의 결과를 위해 정수와 함께 사용해서는 안됩니다.
다음 예제 코드에서는 단일double
변수의 n 번째 지수를 계산하는 방법을 보여줍니다. pow
는 지수화 할 기본 숫자와 지수 자체의 두 매개 변수를 사용합니다. 계산 된 숫자를 반환하므로pow
함수의 결과를printf
호출에 연결할 수 있습니다. 하지만 특정 입력을 찾아야하는 여러 오류가 있으며 모두이 페이지에 문서화되어 있습니다.
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
double x = 10.0;
printf("x: %f\n", x);
printf("x^2: %f\n", pow(x, 2));
exit(EXIT_SUCCESS);
}
출력:
x: 10.000000
x^2: 100.000000
C에서 정수 지수화에 사용자 정의 함수 사용
또는 사용자 정의 함수를 정의하여 정수에 대한 지수를 계산할 수 있습니다. 처음에는 int
값에 대한 함수를 구현합니다. 구현은 매우 간단합니다. for
루프를 사용한 반복은 기본 정수에 자체적으로 n
을 곱합니다. 이 함수는 계산 된 int
값을 반환합니다. 정수형의 오버 플로우는 확인하지 않으며, 사용자는이 기능을 사용할 때이 사실을 알고 있어야합니다.
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int exponentInt(const int base, int n) {
int i, p = base;
for (i = 1; i < n; ++i) p *= base;
return p;
}
int main() {
int x2 = 10;
printf("x2: %d\n", x2);
printf("x2^4: %d\n", exponentInt(x2, 4));
exit(EXIT_SUCCESS);
}
출력:
x2: 10
x2^4: 10000
지수 함수에 대한 이전 구현은 계산 된 숫자에 대해 232-1까지만 높을 수 있기 때문에 제한됩니다.int
유형 자체는 32 비트 저장 공간으로 제한되기 때문입니다. 해당 시스템에 64 비트 공간이있는unsigned long
유형으로이 제한을 확장 할 수 있습니다. 따라서 지수 함수의 계산 된 값은 264-1까지 올라갈 수 있습니다. 이 함수는 다음 예제에서 설명하는 것처럼 특정 지점 이후에 오버플로됩니다.
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
unsigned long exponentInteger(const unsigned long base, unsigned n) {
unsigned long i, p = base;
for (i = 1; i < n; ++i) p *= base;
return p;
}
int main() {
int x2 = 10;
printf("x2: %d\n", x2);
printf("x2^19: %lu\n", exponentInteger(x2, 19));
printf("x2^20: %lu\n", exponentInteger(x2, 20));
exit(EXIT_SUCCESS);
}
출력:
x2: 10
x2^19: 10000000000000000000
x2^20: 7766279631452241920
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook