Les exposants en C
-
Utiliser
pow
comme fonction d’exponentiation en C - Utilisation d’une fonction personnalisée pour l’exponentiation d’un nombre entier 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
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