Namespaces
Variants

logb, logbf, logbl

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
(C99) (C99)
(C99) (C23)
logb
(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 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)
1-3) Extrahiert den Wert des unvoreingenommenen, radixunabhängigen Exponenten aus dem Gleitkomma-Argument arg und gibt ihn als Gleitkommawert zurück.
4) Typgenerische Makros: Wenn arg den Typ long double hat, wird 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

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)