Spec-Zone.ru › C

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)
1-3) Вычисляет двоичный логарифм по основанию 2 от arg.
4) Тип-обобщающий макрос: Если 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)

См. также

loglogflogl
(C99)(C99)
вычисляет натуральный (по основанию e) логарифм (\({\small \ln{x} }\)ln(x))
(функция)
log10log10flog10l
(C99)(C99)
вычисляет десятичный (по основанию 10) логарифм (\({\small \log_{10}{x} }\)log10(x))
(функция)
log1plog1pflog1pl
(C99)(C99)(C99)
вычисляет натуральный (по основанию e) логарифм от 1 плюс заданное число (\({\small \ln{(1+x)} }\)ln(1+x))
(функция)
exp2exp2fexp2l
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API