Les exposants en C

Jinku Hu 12 octobre 2023
  1. Utiliser pow comme fonction d’exponentiation en C
  2. Utilisation d’une fonction personnalisée pour l’exponentiation d’un nombre entier en C
Les exposants en C

Cet article présente plusieurs méthodes d’utilisation des fonctions d’exponentiation en C.

Utiliser pow comme fonction d’exponentiation en C

La fonction pow fait partie de la bibliothèque mathématique C et est définie dans l’en-tête <math.h>. La bibliothèque mathématique doit être explicitement liée lors de l’utilisation de la chaîne d’outils du compilateur gcc. Vous devez passer le drapeau -lm lors de la compilation ou l’inclure dans le fichier du système de compilation correspondant si nécessaire. Le paramètre pow est défini pour les nombres à virgule flottante uniquement ; il ne doit donc pas être utilisé avec des nombres entiers pour des résultats optimaux.

Dans l’exemple de code suivant, nous montrons comment calculer le nième exposant d’une seule variable double. La variable pow prend deux paramètres - un nombre de base à exponentier et l’exposant lui-même. Nous pouvons enchaîner le résultat de la fonction pow dans l’appel printf puisqu’il renvoie le nombre calculé. Mais attention, il y a de nombreuses erreurs à rechercher pour des entrées spécifiques, et toutes sont documentées sur cette page.

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

Production :

x: 10.000000
x^2: 100.000000

Utilisation d’une fonction personnalisée pour l’exponentiation d’un nombre entier en C

Nous pouvons également définir notre fonction personnalisée pour calculer l’exponentiation des nombres entiers. Dans un premier temps, nous implémentons la fonction pour les valeurs int. L’implémentation est assez simple ; l’itération avec la boucle for multiplie l’entier de base par lui-même n fois. La fonction retourne la valeur int calculée. Notez qu’elle ne vérifie pas le débordement du type entier, et l’utilisateur doit être conscient de ce fait lorsqu’il utilise cette fonction.

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

Production :

x2: 10
x2^4: 10000

L’implémentation précédente de la fonction d’exponentiation est limitée car elle ne peut aller que jusqu’à 232-1 pour les nombres calculés car le type int lui-même est limité avec un espace de stockage de 32 bits. Nous pouvons étendre cette limite avec le type unsigned long, qui a un espace de 64-bit sur les systèmes correspondants. Ainsi, la valeur calculée de la fonction d’exponentiation pourrait aller jusqu’à 264-1. Notez que cette fonction débordera après un certain point, comme le montre l’exemple suivant.

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

Production :

x2: 10
x2^19: 10000000000000000000
x2^20: 7766279631452241920
Auteur: 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

Article connexe - C Math