logb, logbf, logbl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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) |
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),
- Si arg es ±0, se retorna -∞ y se activa FE_DIVBYZERO .
- Si arg es ±∞, se retorna +∞.
- Si arg es NaN, se retorna NaN.
- En todos los demás casos, el resultado es exacto ( FE_INEXACT nunca se activa) y el modo de redondeo actual se ignora.
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
|
(C99)
(C99)
|
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) |
|
Documentación de C++
para
logb
|
|