Exponenten in C

Jinku Hu 12 Oktober 2023
  1. Verwendung von pow als Potenzierungsfunktion in C
  2. Benutzerdefinierte Funktion für Ganzzahlpotenzierung in C verwenden
Exponenten in C

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
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

Verwandter Artikel - C Math