Expoentes em C

Jinku Hu 12 outubro 2023
  1. Use pow como função de exponenciação em C
  2. Use Função Definida Personalizada para Exponenciação Inteira em C
Expoentes 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
Autor: 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

Artigo relacionado - C Math