Namensräume
Varianten
Aktionen

frexp, frexpf, frexpl

Von cppreference.com
< c‎ | numerik‎ | math
 
 
 
Allgemeine mathematische Funktionen
Funktionen
Grundlegende Operationen
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
Maximum/Minimum-Operationen
(C99)
(C99)
Exponentialfunktionen
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
Potenzfunktionen
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
Trigonometrische und hyperbolische Funktionen
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
Nächste ganze Gleitkommazahlen
(C99)(C99)(C99)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
Gleitkomma-Manipulation
frexp
(C99)(C99)
(C99)(C23)
(C99)
Verengende Operationen
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quanten- und Quantenexponent-Funktionen
Dezimal-Neu-Kodierungsfunktionen
Gesamtordnung und Payload-Funktionen
Klassifizierung
(C99)
(C99)
(C99)
(C23)
Fehler- und Gammafunktionen
(C99)
(C99)
(C99)
(C99)
Typen
Makrokonstanten
Spezielle Gleitkommawerte
(C99)(C23)
Argumente und Rückgabewerte
Fehlerbehandlung
Schnelle Operationsanzeigen
 
Definiert in Header <math.h>
float       frexpf( float arg, int* exp );
(1) (seit C99)
double      frexp( double arg, int* exp );
(2)
long double frexpl( long double arg, int* exp );
(3) (seit C99)
Definiert in Header <tgmath.h>
#define frexp( arg, exp )
(4) (seit C99)
1-3) Zerlegt den gegebenen Fließkommawert x in einen normalisierten Bruch und eine ganzzahlige Zweierpotenz.
4) Typ-generische Makrofunktion: Wenn arg vom Typ long double ist, wird frexpl aufgerufen. Andernfalls, wenn arg einen ganzzahligen Typ oder den Typ double hat, wird frexp aufgerufen. Andernfalls wird frexpf aufgerufen.

Inhalt

[edit] Parameter

arg - Gleitkommawert
exp - Zeiger auf einen ganzzahligen Wert, in dem der Exponent gespeichert wird

[edit] Rückgabewert

Wenn arg null ist, wird null zurückgegeben und null in *exp gespeichert.

Andernfalls (wenn arg nicht null ist), wenn keine Fehler auftreten, wird der Wert x im Bereich (-1;-0.5], [0.5; 1) zurückgegeben und ein ganzzahliger Wert in *exp gespeichert, so dass x×2(*exp)
=arg
.

Wenn der in *exp zu speichernde Wert außerhalb des Bereichs von int liegt, ist das Verhalten undefiniert.

Wenn arg keine Fließkommazahl ist, ist das Verhalten undefiniert.

[edit] Fehlerbehandlung

Diese Funktion unterliegt keinen Fehlern, die in math_errhandling spezifiziert sind.

Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,

  • Wenn arg ±0 ist, wird es unverändert zurückgegeben und 0 in *exp gespeichert.
  • Wenn arg ±∞ ist, wird es zurückgegeben und ein undefinierter Wert in *exp gespeichert.
  • Wenn arg NaN ist, wird NaN zurückgegeben und ein undefinierter Wert in *exp gespeichert.
  • Es werden keine Gleitkommaausnahmen ausgelöst.
  • Wenn FLT_RADIX 2 ist (oder eine Zweierpotenz), ist der zurückgegebene Wert exakt, der aktuelle Rundungsmodus wird ignoriert.

[edit] Anmerkungen

Auf einem Binärsystem (wo FLT_RADIX 2 ist), kann frexp wie folgt implementiert sein:

{
    *exp = (value == 0) ? 0 : (int)(1 + logb(value));
    return scalbn(value, -(*exp));
}

Die Funktion frexp kann zusammen mit ihrer Dualfunktion, ldexp, verwendet werden, um die Darstellung einer Gleitkommazahl zu manipulieren, ohne direkte Bitmanipulationen durchzuführen.

[edit] Beispiel

#include <float.h>
#include <math.h>
#include <stdio.h>
 
int main(void)
{
    double f = 123.45;
    printf("Given the number %.2f or %a in hex,\n", f, f);
 
    double f3;
    double f2 = modf(f, &f3);
    printf("modf() makes %.0f + %.2f\n", f3, f2);
 
    int i;
    f2 = frexp(f, &i);
    printf("frexp() makes %f * 2^%d\n", f2, i);
 
    i = ilogb(f);
    printf("logb()/ilogb() make %f * %d^%d\n", f/scalbn(1.0, i), FLT_RADIX, i);
}

Mögliche Ausgabe

Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6

[edit] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.12.6.4 The frexp functions (p: TBD)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
  • F.10.3.4 The frexp functions (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.12.6.4 The frexp functions (p: TBD)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
  • F.10.3.4 The frexp functions (p: TBD)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.12.6.4 The frexp functions (p: 243)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. 373-375)
  • F.10.3.4 The frexp functions (p: 521)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.12.6.4 The frexp functions (p: 224)
  • 7.22 Typ-generische Mathematik <tgmath.h> (S. 335-337)
  • F.9.3.4 The frexp functions (p: 458)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.5.4.2 The frexp function

[edit] Siehe auch

multipliziert eine Zahl mit 2 hoch eine Potenz
(Funktion) [bearbeiten]
(C99)(C99)(C99)
extrahiert den Exponenten der gegebenen Zahl
(Funktion) [bearbeiten]
(C99)(C99)(C99)
extrahiert den Exponenten der gegebenen Zahl
(Funktion) [bearbeiten]
(C99)(C99)
teilt eine Zahl in ganzzahligen und gebrochenen Teil auf
(Funktion) [bearbeiten]