Exponentes en C

Jinku Hu 12 octubre 2023
  1. Usar pow como función de exponenciación en C
  2. Usar una función definida por el usuario para la exponenciación de enteros en C
Exponentes en C

Este artículo demostrará múltiples métodos sobre cómo utilizar las funciones de exponenciación en C.

Usar pow como función de exponenciación en C

La función pow es parte de la biblioteca matemática de C y está definida en la cabecera <math.h>. La librería matemática debe ser enlazada explícitamente cuando se utiliza la cadena de herramientas del compilador gcc. Debe pasar la bandera lm al compilar o incluirla en el archivo del sistema de compilación correspondiente según sea necesario. La librería pow está definida sólo para números de punto flotante; por lo tanto, no debe utilizarse con números enteros para obtener resultados óptimos.

En el siguiente código de ejemplo, demostramos cómo calcular el enésimo exponente de una única variable double. pow toma dos parámetros - un número base para exponer y el exponente mismo. Podemos encadenar el resultado de la función pow en la llamada printf ya que devuelve el número calculado. Sin embargo, hay múltiples errores a tener en cuenta para entradas específicas, y todos ellos están documentados en esta 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);
}

Producción :

x: 10.000000
x^2: 100.000000

Usar una función definida por el usuario para la exponenciación de enteros en C

Alternativamente, podemos definir nuestra función personalizada para calcular la exponenciación para números integrales. Al principio, implementamos la función para valores int. La implementación es bastante sencilla; la iteración con el bucle for multiplica el entero base por sí mismo n veces. La función devuelve el valor int calculado. Observe que no comprueba el desbordamiento del tipo entero, y el usuario debe ser consciente de este hecho cuando utilice esta función.

#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);
}

Producción :

x2: 10
x2^4: 10000

La implementación anterior de la función de exponenciación está limitada porque sólo puede llegar hasta 232-1 para los números calculados, ya que el tipo int está limitado con el espacio de almacenamiento de 32 bits. Podemos ampliar este límite con el tipo unsigned long, que tiene un espacio de 64 bits en los sistemas correspondientes. Así, el valor calculado de la función de exponenciación puede llegar a 264-1. Tenga en cuenta que esta función se desbordará a partir de cierto punto, como se demuestra en el siguiente ejemplo.

#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);
}

Producción :

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

Artículo relacionado - C Math