Namespaces
Variants

std:: log2, std:: log2f, std:: log2l

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
Definido en el encabezado <cmath>
(1)
float log2 ( float num ) ;

double log2 ( double num ) ;

long double log2 ( long double num ) ;
(hasta C++23)
/*floating-point-type*/
log2 ( /*floating-point-type*/ num ) ;
(desde C++23)
(constexpr desde C++26)
float log2f ( float num ) ;
(2) (desde C++11)
(constexpr desde C++26)
long double log2l ( long double num ) ;
(3) (desde C++11)
(constexpr desde C++26)
Sobrecarga SIMD (desde C++26)
Definido en el encabezado <simd>
template < /*math-floating-point*/ V >

constexpr /*deduced-simd-t*/ < V >

log2 ( const V & v_num ) ;
(S) (desde C++26)
Definido en el encabezado <cmath>
template < class Integer >
double log2 ( Integer num ) ;
(A) (constexpr desde C++26)
1-3) Calcula el logaritmo binario (base- 2 ) de num . La biblioteca proporciona sobrecargas de std::log2 para todos los tipos de punto flotante sin calificación cv como el tipo del parámetro. (desde C++23)
S) La sobrecarga SIMD realiza un std::log2 elemento por elemento en v_num .
(Consulte math-floating-point y deduced-simd-t para sus definiciones.)
(desde C++26)
A) Se proporcionan sobrecargas adicionales para todos los tipos enteros, los cuales son tratados como double .
(since C++11)

Contenidos

Parámetros

num - valor de punto flotante o entero

Valor de retorno

Si no ocurren errores, se devuelve el logaritmo en base 2 de num ( log 2 (num) o lb(num) ).

Si ocurre un error de dominio, se devuelve un valor definido por la implementación (NaN donde esté soportado).

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 .

Error de dominio ocurre si num es menor que cero.

Puede ocurrir un error de polo si num es cero.

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

  • Si el argumento es ±0, se devuelve -∞ y FE_DIVBYZERO se activa.
  • Si el argumento es 1, se devuelve +0.
  • Si el argumento es negativo, se devuelve NaN y FE_INVALID se activa.
  • Si el argumento es +∞, se devuelve +∞.
  • Si el argumento es NaN, se devuelve NaN.

Notas

Para el entero num , el logaritmo binario puede interpretarse como el índice basado en cero del bit más significativo en 1 en la entrada.

Las sobrecargas adicionales no requieren ser proporcionadas exactamente como (A) . Solo necesitan ser suficientes para garantizar que para su argumento num de tipo entero, std :: log2 ( num ) tenga el mismo efecto que std :: log2 ( static_cast < double > ( num ) ) .

Ejemplo

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
int main()
{
    std::cout << "log2(65536) = " << std::log2(65536) << '\n'
              << "log2(0.125) = " << std::log2(0.125) << '\n'
              << "log2(0x020f) = " << std::log2(0x020f)
              << " (el bit más significativo está en la posición 9)\n"
              << "logaritmo en base 5 de 125 = "
              << std::log2(125) / std::log2(5) << '\n';
    // valores especiales
    std::cout << "log2(1) = " << std::log2(1) << '\n'
              << "log2(+Inf) = " << std::log2(INFINITY) << '\n';
    // manejo de errores
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "log2(0) = " << std::log2(0) << '\n';
    if (errno == ERANGE)
        std::cout << "    errno == ERANGE: " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_DIVBYZERO))
        std::cout << "    FE_DIVBYZERO activado\n";
}

Salida posible:

log2(65536) = 16
log2(0.125) = -3
log2(0x020f) = 9.04166 (el bit más significativo está en la posición 9)
logaritmo en base 5 de 125 = 3
log2(1) = 0
log2(+Inf) = inf
log2(0) = -inf
    errno == ERANGE: Resultado numérico fuera de rango
    FE_DIVBYZERO activado

Véase también

(C++11) (C++11)
calcula el logaritmo natural (base e ) ( ln(x) )
(función)
(C++11) (C++11)
calcula el logaritmo común (base 10 ) ( log 10 (x) )
(función)
(C++11) (C++11) (C++11)
logaritmo natural (base e ) de 1 más el número dado ( ln(1+x) )
(función)
(C++11) (C++11) (C++11)
devuelve 2 elevado a la potencia dada ( 2 x )
(función)