std::log2, std::log2f, std::log2l
Определён в заголовочном файле <cmath> | ||
|---|---|---|
float log2 ( float num ); double log2 ( double num ); long double log2 ( long double num ); | (1) | (до C++23) |
/*floating-point-type*/
log2 ( /*floating-point-type*/ num );
|
(начиная с C++23) (constexpr начиная с C++26) | |
float log2f( float num ); | (2) |
(начиная с C++11) (constexpr начиная с C++26) |
long double log2l( long double num ); | (3) |
(начиная с C++11) (constexpr начиная с C++26) |
| Перегрузка SIMD (начиная с C++26) | ||
Определён в заголовочном файле <simd> | ||
template< /*math-floating-point*/ V >
constexpr /*deduced-simd-t*/<V>
log2 ( const V& v_num );
| (S) | (начиная с C++26) |
| Дополнительные перегрузки (начиная с C++11) | ||
Определён в заголовочном файле <cmath> | ||
template< class Integer > double log2 ( Integer num ); | (A) | (constexpr начиная с C++26) |
num. Библиотека предоставляет перегрузки std::log2 для всех типов с плавающей точкой без cv-квалификаторов в качестве типа параметра.(начиная с C++23)
S) Перегрузка SIMD выполняет поэлементное std::log2 над v_num. (Определения см. в разделах math-floating-point и deduced-simd-t.) | (начиная с C++26) |
| A) Для всех целочисленных типов предоставляются дополнительные перегрузки, которые рассматриваются как double. | (начиная с C++11) |
Параметры
| num | - | значение с плавающей точкой или целочисленное значение |
Возвращаемое значение
Если ошибки не возникают, возвращается двоичный логарифм от num (log2(num) или lb(num)).
Если возникает ошибка области определения, возвращается значение, определяемое реализацией (NaN, если поддерживается).
Если возникает ошибка полюса, возвращается -HUGE_VAL, -HUGE_VALF или -HUGE_VALL.
Обработка ошибок
Об ошибках сообщается в соответствии с math_errhandling.
Ошибка области определения возникает, если num меньше нуля.
Ошибка полюса может возникнуть, если num равно нулю.
Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559),
- Если аргумент равен ±0, возвращается -∞ и возникает исключение
FE_DIVBYZERO. - Если аргумент равен 1, возвращается +0.
- Если аргумент отрицательный, возвращается NaN и возникает исключение
FE_INVALID. - Если аргумент равен +∞, возвращается +∞.
- Если аргумент равен NaN, возвращается NaN.
Примечания
Для целочисленного num двоичный логарифм можно интерпретировать как индекс старшего установленного бита во входных данных, отсчитываемый от нуля.
Не требуется, чтобы дополнительные перегрузки были предоставлены в точности в виде (A). Достаточно, чтобы они обеспечивали для аргумента num целочисленного типа такой же эффект std::log2(num), как и std::log2(static_cast<double>(num)).
Пример
#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)
<< " (highest set bit is in position 9)\n"
<< "base-5 logarithm of 125 = "
<< std::log2(125) / std::log2(5) << '\n';
// special values
std::cout << "log2(1) = " << std::log2(1) << '\n'
<< "log2(+Inf) = " << std::log2(INFINITY) << '\n';
// error handling
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 raised\n";
}
Возможный вывод:
log2(65536) = 16
log2(0.125) = -3
log2(0x020f) = 9.04166 (highest set bit is in position 9)
base-5 logarithm of 125 = 3
log2(1) = 0
log2(+Inf) = inf
log2(0) = -inf
errno == ERANGE: Numerical result out of range
FE_DIVBYZERO raised
См. также
|
(C++11)(C++11) | вычисляет натуральный логарифм (по основанию e) (\({\small\ln{x}}\)ln(x)) (функция) |
|
(C++11)(C++11) | вычисляет десятичный логарифм (по основанию 10) (\({\small\log_{10}{x}}\)log10(x)) (функция) |
|
(C++11)(C++11)(C++11) | натуральный логарифм (по основанию e) от единицы плюс заданное число (\({\small\ln{(1+x)}}\)ln(1+x)) (функция) |
|
(C++11)(C++11)(C++11) | возводит 2 в заданную степень (\({\small 2^x}\)2x) (функция) |
Документация по C для log2 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/math/log2