Use funções exponenciais de STL em C++
-
Use a função
std::exp
para calcular os poderes do número de Euler -
Use a função
std::exp2
para calcular potências de dois -
Use a função
std::pow
para calcular as potências do número fornecido -
Use a função
std::log
para calcular o logaritmo natural do número fornecido
Este artigo irá demonstrar funções STL para calcular o exponencial em C++.
Use a função std::exp
para calcular os poderes do número de Euler
A função std::exp
é parte do cabeçalho <cmath>
junto com muitas funções matemáticas comuns. O primeiro calcula o número de Euler elevado à potência fornecida, que é passado como o único argumento.
A função std::exp
tem múltiplas sobrecargas para float
, double
, long double
e até mesmo tipo integral, mas o último ainda retorna um valor de ponto flutuante double
. Se ocorrer estouro, um dos seguintes valores é retornado +HUGE_VAL
, +HUGE_VALF
ou +HUGE_VALL
.
Observe que existem valores de retorno especiais para vários argumentos como +-0
, +-INFINITY
e NaN
. Todos esses casos são mostrados no código de exemplo a seguir.
#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;
}
Produção:
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
Use a função std::exp2
para calcular potências de dois
Por outro lado, temos a função std::exp2
para calcular as potências de dois. As sobrecargas dessa função retornam valores de ponto flutuante, mas também podem aceitar tipos integrais. Observe que std::exp2
tem valores especiais semelhantes para argumentos como +-0
, +-INFINITY
e NaN
.
#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;
}
Produção:
exp2(4) = 16
exp2(0.5) = 1.41421
exp2(10) = 1024
exp2(-0) = 1
exp2(+Inf) = inf
exp2(NaN) = nan
exp2(-Inf) = 0
Use a função std::pow
para calcular as potências do número fornecido
A função std::pow
é usada para calcular o valor do número elevado à potência fornecida. Tanto o número base quanto o valor da potência são especificados como o primeiro e o segundo argumentos, respectivamente.
std::pow
tem múltiplas sobrecargas para tipos de ponto flutuante, bem como valores integrais, mas os últimos são convertidos para o tipo double
e podem até ser promovidos para long double
se um dos argumentos também for long double
. Além disso, observe que std::pow
não pode ser usado para calcular a raiz de um número negativo.
#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;
}
Produção:
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
Use a função std::log
para calcular o logaritmo natural do número fornecido
A família de funções std::log
também é fornecida em <cmath>
para calcular vários logaritmos para os valores numéricos fornecidos. A função std::log
calcula o logaritmo natural e, semelhante às funções anteriores, possui múltiplas sobrecargas para tipos de ponto flutuante e integrais.
#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;
}
Produção:
log(10) = 2.30259
log(100) = 4.60517
log(1) = 0
log(+Inf) = inf
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