frexp, frexpf, frexpl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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) |
x
in einen normalisierten Bruch und eine ganzzahlige Zweierpotenz.
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 und0in * exp gespeichert. -
Wenn
arg±∞ ist, wird es zurückgegeben und ein nicht spezifizierter Wert in * exp gespeichert. -
Wenn
argNaN 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
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
|
(C99)
(C99)
|
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) |
|
C++-Dokumentation
für
frexp
|
|