Namespaces
Variants

frexp, frexpf, frexpl

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
frexp
(C99) (C99)
(C99) (C23)
(C99)
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
Definiert im 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 im Header <tgmath.h>
#define frexp( arg, exp )
(4) (seit C99)
1-3) Zerlegt den gegebenen Gleitkommawert x in einen normalisierten Bruch und eine ganzzahlige Zweierpotenz.
4) Typgenerisches Makro: Wenn arg den Typ long double hat, wird frexpl aufgerufen. Andernfalls, wenn arg einen ganzzahligen Typ oder den Typ double hat, wird frexp aufgerufen. Andernfalls wird jeweils frexpf aufgerufen.

Inhaltsverzeichnis

Parameter

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

Rückgabewert

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

Andernfalls (falls arg nicht null ist), wenn keine Fehler auftreten, gibt den Wert x im Bereich (-1;-0.5], [0.5; 1) zurück und speichert einen ganzzahligen Wert in * exp , sodass x×2 (*exp)
=arg
.

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

Wenn arg keine Gleitkommazahl ist, ist das Verhalten nicht spezifiziert.

Fehlerbehandlung

Diese Funktion unterliegt keinen der in math_errhandling spezifizierten Fehler.

Wenn die Implementierung IEEE-Gleitkommaarithmetik (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 nicht spezifizierter Wert in * exp gespeichert.
  • Wenn arg NaN ist, wird NaN zurückgegeben und ein nicht spezifizierter Wert in * exp gespeichert.
  • Es werden keine Gleitkomma-Ausnahmen ausgelöst.
  • Wenn FLT_RADIX 2 (oder eine Zweierpotenz) ist, ist der zurückgegebene Wert exakt und der aktuelle Rundungsmodus wird ignoriert.

Hinweise

In einem binären System (wo FLT_RADIX gleich 2 ist), kann frexp implementiert werden als

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

Die Funktion frexp , zusammen mit ihrem Gegenstück, ldexp , kann verwendet werden, um die Darstellung einer Fließkommazahl zu manipulieren, ohne direkte Bit-Manipulationen durchzuführen.

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

Referenzen

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

Siehe auch

multipliziert eine Zahl mit 2 potenziert
(Funktion)
(C99) (C99) (C99)
extrahiert den Exponenten der gegebenen Zahl
(Funktion)
(C99) (C99) (C99)
extrahiert den Exponenten der gegebenen Zahl
(Funktion)
(C99) (C99)
zerlegt eine Zahl in ganzzahligen und gebrochenen Teil
(Funktion)