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
Défini dans l'en-tête <math.h>
float logbf ( float arg ) ;
(1) (depuis C99)
double logb ( double arg ) ;
(2) (depuis C99)
long double logbl ( long double arg ) ;
(3) (depuis C99)
Défini dans l'en-tête <tgmath.h>
#define logb( arg )
(4) (depuis C99)
1-3) Extrait la valeur de l'exposant indépendant de la base non biaisé de l'argument à virgule flottante arg , et la retourne sous forme de valeur à virgule flottante.
4) Macros génériques de type : Si arg a le type long double , logbl est appelé. Sinon, si arg a un type entier ou le type double , logb est appelé. Sinon, logbf est appelé.

Formellement, l'exposant non biaisé est la partie entière signée de log r |arg| (retournée par cette fonction comme valeur flottante), pour un arg non nul, où r est FLT_RADIX . Si arg est sous-normal, il est traité comme s'il était normalisé.

Table des matières

Paramètres

arg - valeur à virgule flottante

Valeur de retour

Si aucune erreur ne se produit, l'exposant non biaisé de arg est renvoyé comme une valeur flottante signée.

Si une erreur de domaine se produit, une valeur définie par l'implémentation est retournée.

Si une erreur de pôle se produit, -HUGE_VAL , -HUGE_VALF , ou -HUGE_VALL est retourné.

Gestion des erreurs

Les erreurs sont signalées comme spécifié dans math_errhandling .

Une erreur de domaine ou de plage peut survenir si arg est nul.

Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),

  • Si arg est ±0, -∞ est retourné et FE_DIVBYZERO est déclenché.
  • Si arg est ±∞, +∞ est retourné.
  • Si arg est NaN, NaN est retourné.
  • Dans tous les autres cas, le résultat est exact ( FE_INEXACT n'est jamais déclenché) et le mode d'arrondi actuel est ignoré.

Notes

POSIX exige qu'une erreur de pôle se produise si arg est ±0.

La valeur de l'exposant retournée par logb est toujours 1 de moins que l'exposant retourné par frexp en raison des différentes exigences de normalisation : pour l'exposant e retourné par logb , |arg*r -e
|
est compris entre 1 et r (généralement entre 1 et 2 ), mais pour l'exposant e retourné par frexp , |arg*2 -e
|
est compris entre 0.5 et 1 .

Exemple

Compare différentes fonctions de décomposition en virgule flottante.

#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");
}

Sortie possible :

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

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • 7.12.6.11 Les fonctions logb (p: TBD)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
  • F.10.3.11 Les fonctions logb (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.12.6.11 Les fonctions logb (p: 179-180)
  • 7.25 Mathématiques génériques <tgmath.h> (p: 373-375)
  • F.10.3.11 Les fonctions logb (p: 381)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.12.6.11 Les fonctions logb (p: 246)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: 373-375)
  • F.10.3.11 Les fonctions logb (p: 522)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.12.6.11 Les fonctions logb (p. 227)
  • 7.22 Mathématiques génériques de type <tgmath.h> (p. 335-337)
  • F.9.3.11 Les fonctions logb (p. 459)

Voir aussi

décompose un nombre en mantisse et puissance de 2
(fonction)
(C99) (C99) (C99)
extrait l'exposant du nombre donné
(fonction)
(C99) (C99) (C99) (C99) (C99) (C99)
calcule efficacement un nombre multiplié par FLT_RADIX élevé à une puissance
(fonction)