C의 지수

Jinku Hu 2023년10월12일
  1. C에서 pow를 지수화 함수로 사용
  2. C에서 정수 지수화에 사용자 정의 함수 사용
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
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

관련 문장 - C Math