Fonction de bibliothèque C -frexp()

Bibliothèque standard C - <math.h>

Description

Fonctions de bibliothèque Cdouble frexp(double x, int *exponent)Décompose le nombre à virgule flottante x en une mantisse et un exposant. La valeur de retour est la mantisse, et l'exposant est stocké dansexponentDans. La valeur résultante estx = mantissa * 2 ^ exponent。

frexp()est la bibliothèque standard C<math.h>une fonction qui décompose un nombre à virgule flottante en une significande et un exposant en base 2. Elle est couramment utilisée pour des opérations avancées sur les nombres à virgule flottante, telles que la normalisation et l'analyse numérique.

Déclaration

Ci-dessous se trouve la déclaration de la fonction frexp().

#include <math.h>

double frexp(double x, int *exp);
float frexpf(float x, int *exp);
long double frexpl(long double x, int *exp);

Paramètre

  • xLe nombre à virgule flottante à décomposer.
  • exp: pointeur vers un entier, utilisé pour stocker l'exposant en base 2.

Valeur de retour

  • returnxLa partie significande de, telle quex = mantissa * 2^exp, oùmantissaLa valeur de retour est dans la plage valide de 0.5 (inclus) à 1.0 (exclu), ou -0.5 (inclus) à -1.0 (exclu),expest l'exposant.

Exemple

L'exemple suivant démontre l'utilisation de la fonction frexp().

Exemple

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

int main ()
{
   double x = 1024, fraction;
   int e;
   
   fraction = frexp(x, &e);
   printf("x = %.2lf = %.2lf * 2^%d\n", x, fraction, e);
   
   return(0);
}

Compilons et exécutons le programme ci-dessus, ce qui produira le résultat suivant :

x = 1024.00 = 0.50 * 2^11

traiter plusieurs nombres à virgule flottante

L'exemple suivant montre comment gérer plusieurs nombres à virgule flottante :

Exemple

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

int main() {
    double values[] = {0.5, 1.0, 4.0, 10.0, 16.0};
    int num_values = sizeof(values) / sizeof(values[0]);

    for (int i = 0; i < num_values; i++) {
        double x = values[i];
        int exponent;
        double mantissa = frexp(x, &exponent);
        printf("x = %f, mantissa = %f, exponent = %d\n", x, mantissa, exposant);
    }

    return 0;
}

Compilons et exécutons le programme ci-dessus, ce qui produira le résultat suivant :

x = 0.500000, mantissa = 0.500000, exponent = 0
x = 1.000000, mantissa = 0.500000, exponent = 1
x = 4.000000, mantissa = 0.500000, exponent = 3
x = 10.000000, mantissa = 0.625000, exponent = 4
x = 16.000000, mantissa = 0.500000, exponent = 5

Explication du code

  • Définissez un tableau contenant plusieurs nombres à virgule flottantevalues。
  • UtilisationforParcourez chaque valeur et appelezfrexp()effectuer la décomposition et afficher les résultats.

Utilisationfrexp()Application pratique

frexp()Il est couramment utilisé dans la représentation standardisée des nombres à virgule flottante et dans divers algorithmes d'analyse numérique. Il peut aider à éviter les problèmes de dépassement et de sous-dépassement qui surviennent lors de la manipulation directe de nombres à virgule flottante.

L'exemple suivant montre comment utiliserfrexp()etldexp()avecfrexp()fonctions associées) pour décomposer et reconstruire des nombres à virgule flottante :

Exemple

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

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

    // Reconstruire le nombre à virgule flottante
    double reconstructed_x = ldexp(mantissa, exponent);

    printf("x d'origine = %f\n", x);
    printf("Mantisse = %f, Exposant = %d\n", mantissa, exponent);
    printf("x reconstruit = %f\n", reconstructed_x);

    return 0;
}

Compilons et exécutons le programme ci-dessus, ce qui produira le résultat suivant :

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

Explication du code

  • définir un nombre à virgule flottantex, la valeur est 123.456.
  • Utilisationfrexp()vaxDécomposer en mantisse et exposant.
  • Utilisationldexp()Reconstruire le nombre à virgule flottante d'origine à partir de la significande et de l'exposant.
  • Afficher la valeur d'origine, la significande, l'exposant et le nombre à virgule flottante reconstruit.

Résumé

frexp()La fonction est utilisée pour décomposer les nombres à virgule flottante en significandes et exposants, et c'est un outil important pour gérer les opérations à virgule flottante. Grâce à une utilisation raisonnable,frexp()des opérations efficaces sur les nombres à virgule flottante peuvent être réalisées dans l'analyse numérique, le calcul scientifique et les applications d'ingénierie.

Bibliothèque standard C - <math.h>

autres extensions