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
Definido en el encabezado <math.h>
float logbf ( float arg ) ;
(1) (desde C99)
double logb ( double arg ) ;
(2) (desde C99)
long double logbl ( long double arg ) ;
(3) (desde C99)
Definido en el encabezado <tgmath.h>
#define logb( arg )
(4) (desde C99)
1-3) Extrae el valor del exponente imparcial independiente de la base del argumento de punto flotante arg , y lo devuelve como un valor de punto flotante.
4) Macros genéricas de tipos: Si arg tiene tipo long double , logbl es llamado. De lo contrario, si arg tiene tipo entero o el tipo double , logb es llamado. De lo contrario, logbf es llamado.

Formalmente, el exponente imparcial es la parte integral con signo de log r |arg| (devuelto por esta función como un valor de punto flotante), para arg distinto de cero, donde r es FLT_RADIX . Si arg es subnormal, se trata como si estuviera normalizado.

Contenidos

Parámetros

arg - valor de punto flotante

Valor de retorno

Si no ocurren errores, el exponente imparcial de arg se devuelve como un valor de punto flotante con signo.

Si ocurre un error de dominio, se devuelve un valor definido por la implementación.

Si ocurre un error de polo, -HUGE_VAL , -HUGE_VALF , o -HUGE_VALL es devuelto.

Manejo de errores

Los errores se reportan como se especifica en math_errhandling .

Puede ocurrir un error de dominio o rango si arg es cero.

Si la implementación soporta aritmética de punto flotante IEEE (IEC 60559),

Notas

POSIX requiere que ocurra un error de polo si arg es ±0.

El valor del exponente devuelto por logb es siempre 1 menor que el exponente devuelto por frexp debido a los diferentes requisitos de normalización: para el exponente e devuelto por logb , |arg*r -e
|
está entre 1 y r (típicamente entre 1 y 2 ), pero para el exponente e devuelto por frexp , |arg*2 -e
|
está entre 0.5 y 1 .

Ejemplo

Compara diferentes funciones de descomposición de números de punto flotante.

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

Salida posible:

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

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.12.6.11 Las funciones logb (p: TBD)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: TBD)
  • F.10.3.11 Las funciones logb (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.12.6.11 Las funciones logb (p: 179-180)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: 373-375)
  • F.10.3.11 Las funciones logb (p: 381)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.12.6.11 Las funciones logb (p: 246)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: 373-375)
  • F.10.3.11 Las funciones logb (p: 522)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.12.6.11 Las funciones logb (p: 227)
  • 7.22 Matemáticas genéricas de tipo <tgmath.h> (p: 335-337)
  • F.9.3.11 Las funciones logb (p: 459)

Véase también

descompone un número en significando y una potencia de 2
(función)
(C99) (C99) (C99)
extrae el exponente del número dado
(función)
(C99) (C99) (C99) (C99) (C99) (C99)
calcula eficientemente un número multiplicado por FLT_RADIX elevado a una potencia
(función)