C++에서 STL의 지수 함수 사용

Jinku Hu 2023년10월12일
  1. std::exp 함수를 사용하여 오일러 수의 거듭제곱 계산
  2. std::exp2 함수를 사용하여 2의 거듭제곱 계산
  3. std::pow 함수를 사용하여 주어진 숫자의 거듭제곱 계산
  4. std::log 함수를 사용하여 주어진 숫자의 자연 로그 계산
C++에서 STL의 지수 함수 사용

이 기사에서는 C++에서 지수를 계산하기 위한 STL 함수를 보여줍니다.

std::exp 함수를 사용하여 오일러 수의 거듭제곱 계산

std::exp 함수는 많은 일반적인 수학 함수와 함께 <cmath> 헤더의 일부입니다. 전자는 주어진 거듭제곱으로 거듭제곱된 오일러 수를 계산하며, 이는 유일한 인수로 전달됩니다.

std::exp 함수에는 float, double, long double 및 정수 유형에 대한 다중 오버로드가 있지만 후자는 여전히 double 부동 소수점 값을 반환합니다. 오버플로가 발생하면 +HUGE_VAL, +HUGE_VALF 또는 +HUGE_VALL 값 중 하나가 반환됩니다.

+-0, +-INFINITYNaN과 같은 여러 인수에 대한 특수 반환 값이 있습니다. 이러한 모든 경우는 다음 예제 코드에 나와 있습니다.

#include <cmath>
#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;

int main() {
  cout << "exp(1) = e¹ = " << std::setprecision(16) << std::exp(1) << '\n'
       << "exp(10)  = " << std::exp(10) << '\n'
       << "exp(100) = " << std::exp(100) << '\n';

  cout << "exp(-0) = " << std::exp(-0.0) << '\n'
       << "exp(+Inf) = " << std::exp(+INFINITY) << '\n'
       << "exp(NaN) = " << std::exp(NAN) << '\n'
       << "exp(-Inf) = " << std::exp(-INFINITY) << '\n';

  return EXIT_SUCCESS;
}

출력:

exp(1) = e¹ = 2.718281828459045
exp(10)  = 22026.46579480672
exp(100) = 2.688117141816136e+43
exp(-0) = 1
exp(+Inf) = inf
exp(NaN) = nan
exp(-Inf) = 0

std::exp2 함수를 사용하여 2의 거듭제곱 계산

반면에 2의 거듭제곱을 계산하는 std::exp2 함수가 있습니다. 이 함수의 오버로드는 부동 소수점 값을 반환하지만 정수 형식도 허용할 수 있습니다. std::exp2에는 +-0, +-INFINITYNaN과 같은 인수에 대해 유사한 특수 값이 있습니다.

#include <cmath>
#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;

int main() {
  cout << "exp2(4) = " << std::exp2(4) << '\n'
       << "exp2(0.5) = " << std::exp2(0.5) << '\n'
       << "exp2(10) = " << std::exp2(10) << '\n';

  cout << "exp2(-0) = " << std::exp2(-0.0) << '\n'
       << "exp2(+Inf) = " << std::exp2(+INFINITY) << '\n'
       << "exp2(NaN) = " << std::exp2(NAN) << '\n'
       << "exp2(-Inf) = " << std::exp2(-INFINITY) << '\n';

  return EXIT_SUCCESS;
}

출력:

exp2(4) = 16
exp2(0.5) = 1.41421
exp2(10) = 1024
exp2(-0) = 1
exp2(+Inf) = inf
exp2(NaN) = nan
exp2(-Inf) = 0

std::pow 함수를 사용하여 주어진 숫자의 거듭제곱 계산

std::pow 함수는 주어진 거듭제곱으로 거듭난 숫자의 값을 계산하는 데 사용됩니다. 밑수와 거듭제곱 값은 각각 첫 번째 인수와 두 번째 인수로 지정됩니다.

std::pow는 부점 유형과 정수치에 대해 여러 개의 중재가 있지만, 후자는 double 타입으로 강제로 전환되어 심지어 long double로 승격될 수 있다. 만약 제원 중 하나라도 long double이다. 또한 std::pow는 음수의 근을 계산하는 데 사용할 수 없습니다.

#include <cmath>
#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;

int main() {
  cout << "pow(2, 10) = " << std::pow(2, 10) << '\n'
       << "pow(10, 0.5) = " << std::pow(10, 0.5) << '\n'
       << "pow(-25, -2) = " << std::pow(-25, -2) << '\n';

  cout << "pow(-1, NAN) = " << std::pow(-1, NAN) << '\n'
       << "pow(+1, NAN) = " << std::pow(+1, NAN) << '\n'
       << "pow(INFINITY, 2) = " << std::pow(INFINITY, 2) << '\n'
       << "pow(INFINITY, -1) = " << std::pow(INFINITY, -1) << '\n';

  return EXIT_SUCCESS;
}

출력:

pow(2, 10) = 1024
pow(10, 0.5) = 3.16228
pow(-25, -2) = 0.0016
pow(-1, NAN) = nan
pow(+1, NAN) = 1
pow(INFINITY, 2) = inf
pow(INFINITY, -1) = 0

std::log 함수를 사용하여 주어진 숫자의 자연 로그 계산

std::log 함수군도 <cmath>에서 제공되어 주어진 숫자 값에 대한 다양한 로그를 계산합니다. std::log 함수는 자연 로그를 계산하며 이전 함수와 유사하게 부동 소수점 및 정수 유형에 대한 다중 오버로드가 있습니다.

#include <cmath>
#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;

int main() {
  cout << "log(10) = " << std::log(10) << '\n'
       << "log(100) = " << std::log(100) << '\n';

  cout << "log(1) = " << std::log(1) << '\n'
       << "log(+Inf) = " << std::log(INFINITY) << '\n';

  return EXIT_SUCCESS;
}

출력:

log(10) = 2.30259
log(100) = 4.60517
log(1) = 0
log(+Inf) = inf
작가: 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