C-Bibliotheksfunktion -ldexp()

C-Standardbibliothek - <math.h>

Beschreibung

C-Bibliotheksfunktionendouble ldexp(double x, int exponent)gibtxmal 2 hochExponentzurück.

ldexp()ist Teil der C-Standardbibliothek<math.h>Eine der Funktionen, die zum Berechnen verwendet wirdx * 2^exp. Sie wird normalerweise mitfrexp()Wenn sie zusammen verwendet werden, werden die Signifikand- und Exponententeile einer Gleitkommazahl zu einer Gleitkommazahl zusammengesetzt. Dies ist sehr nützlich bei numerischen Berechnungen und fortgeschrittenen Operationen mit Gleitkommazahlen.

Deklaration

Nachfolgend ist die Deklaration der Funktion ldexp() aufgeführt.

#include <math.h>

double ldexp(double x, int exp);
float ldexpf(float x, int exp);
long double ldexpl(long double x, int exp);

Parameter

  • xDie Gleitkommazahl, die mit dem Exponenten kombiniert werden soll.
  • expDer Exponent zur Basis 2.

Rückgabewert

  • returnx * 2^exp, mit demselben Typ wie die Eingabexkonsistent.

Beispiel

Das folgende Beispiel demonstriert die Verwendung der Funktion ldexp().

Beispiel

#include <stdio.h>
#include <math.h>

int main ()
{
   double x, ret;
   int n;

   x = 0.65;
   n = 3;
   ret = ldexp(x ,n);
   printf("%f * 2^%d = %f\n", x, n, ret);
   
   return(0);
}

Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:

0.650000 * 2^3 = 5.200000

undfrexp()in Kombination verwendet

Das folgende Beispiel zeigt, wie man verwendetfrexp()undldexp()um eine Gleitkommazahl zu zerlegen und zu rekonstruieren:

Beispiel

#include <stdio.h>
#include <math.h>

int main() {
    double x = 123.456;
    int exponent;
    double mantissa = frexp(x, &exponent);

    // Rekonstruiere die Gleitkommazahl
    double reconstructed_x = ldexp(mantissa, exponent);

    printf("Ursprüngliches x = %f\n", x);
    printf("Mantisse = %f, Exponent = %d\n", mantissa, exponent);
    printf("Rekonstruiertes x = %f\n", reconstructed_x);

    return 0;
}

Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:

Original x = 123.456000
Mantissa = 0.964500, Exponent = 7
Reconstructed x = 123.456000

Code-Erklärung

  • Eine Gleitkommazahl definierenx, der Wert ist 123.456.
  • Nutzungfrexp()wirdxIn einen Signifikanden und einen Exponenten zerlegen.
  • Nutzungldexp()Rekonstruieren Sie die ursprüngliche Gleitkommazahl aus dem Signifikand und dem Exponenten.
  • Geben Sie den ursprünglichen Wert, den Signifikand, den Exponenten und die rekonstruierte Gleitkommazahl aus.

Fehlerbehandlung

ldexp()Die Funktion gibt keinen Fehlerstatus zurück, aber in einigen Fällen kann die Eingabe einen Überlauf oder Unterlauf verursachen. Bei Ergebnissen, die zu groß oder zu klein sind, können positive Unendlichkeit, negative Unendlichkeit oder null zurückgegeben werden. Unter Verwendung derisinf()undisnan()Funktion kann diese Bedingungen erkennen.

Das folgende Beispiel zeigt, wie mögliche Überlauf- und Unterlaufbedingungen behandelt werden:

Beispiel

#include <stdio.h>
#include <math.h>
#include <errno.h>

int main() {
    double x = 1.0;
    int exponent = 1024;
    double result = ldexp(x, exponent);

    if (isinf(result)) {
        printf("Überlauf: ldexp(%f, %d) ergibt unendlich.\n", x, exponent);
    } else if (result == 0.0 && errno == ERANGE) {
        printf("Unterlauf: ldexp(%f, %d) ergibt null.\n", x, exponent);
    } else {
        printf("ldexp(%f, %d) = %f\n", x, exponent, result);
    }

    return 0;
}

Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:

Overflow: ldexp(1.000000, 1024) results in infinity.

Code-Erklärung

  • Eine Gleitkommazahl definierenxund eine sehr große Ganzzahlexponent。
  • Aufrufldexp(x, exponent)Berechnenx * 2^exponent, das Ergebnis wird gespeichert inresultIn.
  • Nutzungisinf()Überprüfen Sie, ob das Ergebnis unendlich ist, und behandeln Sie Überlauffälle.
  • Überprüfen Sie, ob das Ergebnis null ist, und behandeln Sie Unterlauffälle.
  • Geben Sie das Berechnungsergebnis aus.

Zusammenfassung

ldexp()Die Funktion wird verwendet, um zu berechnenx * 2^expist ein wichtiges Werkzeug für den Umgang mit Gleitkommaoperationen. Durch sinnvolle Nutzungldexp()kann eine effiziente Handhabung von Gleitkommazahlen in der numerischen Analyse, im wissenschaftlichen Rechnen und in technischen Anwendungen erreichen, insbesondere wenn es notwendig istfrexp()wenn es in Kombination mit der Funktion verwendet wird.

C-Standardbibliothek - <math.h>

Weitere Erweiterungen