Exponenten in C
-
Verwendung von
pow
als Potenzierungsfunktion in C - Benutzerdefinierte Funktion für Ganzzahlpotenzierung in C verwenden
In diesem Artikel werden mehrere Methoden zur Verwendung von Potenzierungsfunktionen in C vorgestellt.
Verwendung von pow
als Potenzierungsfunktion in C
Die Funktion pow
ist Teil der mathematischen Bibliothek von C und ist im Header <math.h>
definiert. Die mathematische Bibliothek sollte explizit gelinkt werden, wenn Sie die gcc
Compiler-Toolchain verwenden. Sie sollten das -lm
-Flag beim Kompilieren übergeben oder sie bei Bedarf in die entsprechende Build-System-Datei aufnehmen. pow
ist nur für Fließkommazahlen definiert; daher sollte es für optimale Ergebnisse nicht mit ganzen Zahlen verwendet werden.
Im folgenden Beispielcode wird demonstriert, wie man den n-ten Exponenten einer einzelnen double
-Variablen berechnet. Die Funktion pow
benötigt zwei Parameter - eine Basiszahl zum Potenzieren und den Exponenten selbst. Wir können das Ergebnis der Funktion pow
mit dem Aufruf von printf
verketten, da es die berechnete Zahl zurückgibt. Beachten Sie jedoch, dass es mehrere Fehler gibt, auf die Sie bei bestimmten Eingaben achten müssen, und die alle auf dieser Seite dokumentiert sind.
#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);
}
Ausgabe:
x: 10.000000
x^2: 100.000000
Benutzerdefinierte Funktion für Ganzzahlpotenzierung in C verwenden
Alternativ können wir eine eigene Funktion definieren, um die Potenzierung für ganze Zahlen zu berechnen. Zunächst implementieren wir die Funktion für int
-Werte. Die Implementierung ist recht einfach; die Iteration mit der for
-Schleife multipliziert die Basis-Ganzzahl mit sich selbst n
mal. Die Funktion gibt den berechneten int
-Wert zurück. Beachten Sie, dass sie nicht auf einen Überlauf des Integer-Typs prüft, und der Benutzer sollte sich dieser Tatsache bewusst sein, wenn er diese Funktion verwendet.
#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);
}
Ausgabe:
x2: 10
x2^4: 10000
Die bisherige Implementierung für die Potenzierungsfunktion ist begrenzt, da sie nur bis 232-1 für berechnete Zahlen gehen kann, da der Typ int
selbst mit 32 Bit Speicherplatz begrenzt ist. Wir können diese Grenze mit dem Typ unsigned long
erweitern, der auf entsprechenden Systemen 64-Bit Speicherplatz hat. Somit könnte der berechnete Wert der Potenzierungsfunktion bis zu 264-1 gehen. Beachten Sie, dass diese Funktion ab einem bestimmten Punkt überläuft, wie im folgenden Beispiel gezeigt wird.
#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);
}
Ausgabe:
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