Expoentes em C
-
Use
pow
como função de exponenciação em C - Use Função Definida Personalizada para Exponenciação Inteira em C
Este artigo demonstrará vários métodos sobre como usar funções de exponenciação em C.
Use pow
como função de exponenciação em C
A função pow
é parte da biblioteca matemática C e é definida no cabeçalho <math.h>
. A biblioteca matemática deve ser explicitamente vinculada ao usar o conjunto de ferramentas do compilador gcc
. Você deve passar o sinalizador -lm
ao compilar ou incluí-lo no arquivo de sistema de compilação correspondente, conforme necessário. pow
é definido apenas para números de ponto flutuante; portanto, não deve ser usado com inteiros para resultados ideais.
No código de exemplo a seguir, demonstramos como calcular o enésimo expoente de uma única variável dupla
. pow
leva dois parâmetros - um número base para exponenciar e o próprio expoente. Podemos encadear o resultado da função pow
na chamada printf
, uma vez que retorna o número calculado. Lembre-se, porém, de que existem vários erros para procurar entradas específicas, e todos eles estão documentados nesta página.
#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);
}
Resultado:
x: 10.000000
x^2: 100.000000
Use Função Definida Personalizada para Exponenciação Inteira em C
Alternativamente, podemos definir nossa função personalizada para calcular a exponenciação para números inteiros. Em primeiro lugar, implementamos a função para valores int
. A implementação é bastante direta; a iteração com o laço for
multiplica o inteiro base por si mesmo n
vezes. A função retorna o valor int
calculado. Observe que ele não verifica o estouro do tipo inteiro, e o usuário deve estar ciente desse fato ao utilizar esta função.
#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);
}
Resultado:
x2: 10
x2^4: 10000
A implementação anterior para a função de exponenciação é limitada porque só pode chegar a 232-1 para números calculados, pois o próprio tipo int
é limitado com espaço de armazenamento de 32 bits. Podemos estender esse limite com o tipo unsigned long
, que tem espaço de 64 bits nos sistemas correspondentes. Assim, o valor calculado da função de exponenciação pode ir até 264-1. Observe que esta função irá transbordar após um certo ponto, conforme demonstrado no exemplo a seguir.
#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);
}
Resultado:
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