log2, log2f, log2l
Defined in header <math.h> |
||
|---|---|---|
float log2f( float arg ); |
(1) | (since C99) |
double log2( double arg ); |
(2) | (since C99) |
long double log2l( long double arg ); |
(3) | (since C99) |
Defined in header <tgmath.h> |
||
#define log2( arg ) |
(4) | (since C99) |
2 от arg. arg имеет тип long double, вызывается log2l. В противном случае, если arg имеет целочисленный тип или тип double, вызывается log2. В противном случае, вызывается log2f.Параметры
| arg | - | значение с плавающей точкой |
Возвращаемое значение
Если ошибок нет, возвращается двоичный логарифм arg (log2(arg) или lb(arg)).
Если произошла ошибка области определения, возвращается значение, определяемое реализацией (NaN при поддержке).
Если произошла ошибка полюса, возвращается -HUGE_VAL, -HUGE_VALF, или -HUGE_VALL.
Обработка ошибок
Ошибки сообщаются в соответствии с указаниями в math_errhandling.
Ошибка области определения возникает, если arg меньше нуля.
Ошибка полюса может возникнуть, если arg равно нулю.
Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559),
- Если аргумент равен ±0, возвращается -∞ и поднимается
FE_DIVBYZERO. - Если аргумент равен 1, возвращается +0
- Если аргумент отрицательный, возвращается NaN и поднимается
FE_INVALID. - Если аргумент равен +∞, возвращается +∞
- Если аргумент равен NaN, возвращается NaN
Примечания
Для целых arg, двоичный логарифм может интерпретироваться как индекс (с началом от нуля) старшего значащего бита на входе.
Пример
#include <stdio.h>
#include <math.h>
#include <float.h>
#include <errno.h>
#include <fenv.h>
// #pragma STDC FENV_ACCESS ON
int main(void)
{
printf("log2(65536) = %f\n", log2(65536));
printf("log2(0.125) = %f\n", log2(0.125));
printf("log2(0x020f) = %f (highest set bit is in position 9)\n", log2(0x020f));
printf("base-5 logarithm of 125 = %f\n", log2(125)/log2(5));
// special values
printf("log2(1) = %f\n", log2(1));
printf("log2(+Inf) = %f\n", log2(INFINITY));
//error handling
errno = 0; feclearexcept(FE_ALL_EXCEPT);
printf("log2(0) = %f\n", log2(0));
if(errno == ERANGE) perror(" errno == ERANGE");
if(fetestexcept(FE_DIVBYZERO)) puts(" FE_DIVBYZERO raised");
}Возможный вывод:
log2(65536) = 16.000000
log2(0.125) = -3.000000
log2(0x020f) = 9.041659 (highest set bit is in position 9)
base-5 logarithm of 125 = 3.000000
log2(1) = 0.000000
log2(+Inf) = inf
log2(0) = -inf
errno == ERANGE: Numerical result out of range
FE_DIVBYZERO raisedСсылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.12.6.10 Функции log2 (с. 179)
- 7.25 Тип-обобщающая математика <tgmath.h> (с. 272-273)
- F.10.3.10 Функции log2 (с. 381)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.12.6.10 Функции log2 (с. 246)
- 7.25 Тип-обобщающая математика <tgmath.h> (с. 373-375)
- F.10.3.10 Функции log2 (с. 522)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.12.6.10 Функции log2 (с. 226)
- 7.22 Тип-обобщающая математика <tgmath.h> (с. 335-337)
- F.9.3.10 Функции log2 (с. 459)
См. также
|
(C99)(C99) |
вычисляет натуральный (по основанию e) логарифм (\({\small \ln{x} }\)ln(x)) (функция) |
|
(C99)(C99) |
вычисляет десятичный (по основанию 10) логарифм (\({\small \log_{10}{x} }\)log10(x)) (функция) |
|
(C99)(C99)(C99) |
вычисляет натуральный (по основанию e) логарифм от 1 плюс заданное число (\({\small \ln{(1+x)} }\)ln(1+x)) (функция) |
|
(C99)(C99)(C99) |
вычисляет 2 в степени заданного числа (\({\small 2^x}\)2x) (функция) |
Документация C++ для log2 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/math/log2