logb, logbf, logbl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im Header
<math.h>
|
||
|
float
logbf
(
float
arg
)
;
|
(1) | (seit C99) |
|
double
logb
(
double
arg
)
;
|
(2) | (seit C99) |
|
long
double
logbl
(
long
double
arg
)
;
|
(3) | (seit C99) |
|
Definiert im Header
<tgmath.h>
|
||
|
#define logb( arg )
|
(4) | (seit C99) |
logbl
aufgerufen. Andernfalls, wenn
arg
einen Ganzzahltyp oder den Typ
double
hat, wird
logb
aufgerufen. Andernfalls wird
logbf
aufgerufen.
Formal ist der unverzerrte Exponent der vorzeichenbehaftete ganzzahlige Teil von
log
r
|arg|
(von dieser Funktion als Fließkommawert zurückgegeben), für nicht-null
arg
, wobei
r
gleich
FLT_RADIX
ist. Wenn
arg
subnormal ist, wird es so behandelt, als wäre es normalisiert.
Inhaltsverzeichnis |
Parameter
| arg | - | Gleitkommawert |
Rückgabewert
Wenn keine Fehler auftreten, wird der unverzerrte Exponent von arg als vorzeichenbehafteter Gleitkommawert zurückgegeben.
Wenn ein Domänenfehler auftritt, wird ein implementierungsdefinierter Wert zurückgegeben.
Wenn ein Polfehler auftritt,
-HUGE_VAL
,
-HUGE_VALF
, oder
-HUGE_VALL
wird zurückgegeben.
Fehlerbehandlung
Fehler werden gemeldet, wie in
math_errhandling
spezifiziert.
Ein Domänen- oder Wertebereichsfehler kann auftreten, wenn arg null ist.
Wenn die Implementierung IEEE-Gleitkommaarithmetik (IEC 60559) unterstützt,
- Wenn arg ±0 ist, wird -∞ zurückgegeben und FE_DIVBYZERO ausgelöst.
- Wenn arg ±∞ ist, wird +∞ zurückgegeben.
- Wenn arg NaN ist, wird NaN zurückgegeben.
- In allen anderen Fällen ist das Ergebnis exakt ( FE_INEXACT wird nie ausgelöst) und der aktuelle Rundungsmodus wird ignoriert.
Hinweise
POSIX erfordert dass ein Polfehler auftritt, wenn arg ±0 ist.
Der vom
logb
zurückgegebene Exponentenwert ist stets
1
kleiner als der von
frexp
zurückgegebene Exponent aufgrund der unterschiedlichen Normalisierungsanforderungen: Für den Exponenten
e
, der von
logb
zurückgegeben wird, liegt
|arg*r
-e
|
zwischen
1
und
r
(typischerweise zwischen
1
und
2
), aber für den Exponenten
e
, der von
frexp
zurückgegeben wird, liegt
|arg*2
-e
|
zwischen
0.5
und
1
.
Beispiel
Vergleicht verschiedene Gleitkomma-Zerlegungsfunktionen.
#include <fenv.h> #include <float.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON 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 = logb(f); printf("logb()/logb() make %f * %d^%d\n", f/scalbn(1.0, i), FLT_RADIX, i); // error handling feclearexcept(FE_ALL_EXCEPT); printf("logb(0) = %f\n", logb(0)); if (fetestexcept(FE_DIVBYZERO)) puts(" FE_DIVBYZERO raised"); }
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()/logb() make 1.928906 * 2^6
logb(0) = -Inf
FE_DIVBYZERO raised
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.12.6.11 Die logb-Funktionen (S.: TBD)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S.: TBD)
-
- F.10.3.11 Die logb-Funktionen (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.12.6.11 Die logb-Funktionen (S. 179-180)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S. 373-375)
-
- F.10.3.11 Die logb-Funktionen (S. 381)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.12.6.11 Die logb-Funktionen (S. 246)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S. 373-375)
-
- F.10.3.11 Die logb-Funktionen (S. 522)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.12.6.11 Die logb-Funktionen (S. 227)
-
- 7.22 Typgenerische Mathematik <tgmath.h> (S. 335-337)
-
- F.9.3.11 Die logb-Funktionen (S. 459)
Siehe auch
|
(C99)
(C99)
|
zerlegt eine Zahl in Signifikand und Zweierpotenz
2
(Funktion) |
|
(C99)
(C99)
(C99)
|
extrahiert den Exponenten der gegebenen Zahl
(Funktion) |
|
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
|
berechnet effizient eine Zahl multipliziert mit
FLT_RADIX
hoch einer Potenz
(Funktion) |
|
C++-Dokumentation
für
logb
|
|