Namespaces
Variants

logb, logbf, logbl

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
(C99) (C99)
(C99) (C23)
logb
(C99)
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
Определено в заголовке <math.h>
float logbf ( float arg ) ;
(1) (начиная с C99)
double logb ( double arg ) ;
(2) (начиная с C99)
long double logbl ( long double arg ) ;
(3) (начиная с C99)
Определено в заголовке <tgmath.h>
#define logb( arg )
(4) (начиная с C99)
1-3) Извлекает значение несмещенного независимого от основания системы счисления порядка из аргумента с плавающей запятой arg и возвращает его как значение с плавающей запятой.
4) Макросы общего типа: Если arg имеет тип long double , logbl вызывается. В противном случае, если arg имеет целочисленный тип или тип double , logb вызывается. В остальных случаях logbf вызывается.

Формально, несмещённая экспонента — это знаковая целая часть log r |arg| (возвращаемая данной функцией как значение с плавающей точкой), для ненулевого arg , где r это FLT_RADIX . Если arg является денормализованным, он обрабатывается как нормализованный.

Содержание

Параметры

arg - значение с плавающей запятой

Возвращаемое значение

Если ошибок не возникает, несмещённая экспонента arg возвращается в виде знакового значения с плавающей запятой.

Если возникает ошибка домена, возвращается значение, определяемое реализацией.

Если возникает ошибка полюса, -HUGE_VAL , -HUGE_VALF , или -HUGE_VALL возвращается.

Обработка ошибок

Ошибки сообщаются, как указано в math_errhandling .

Ошибка области определения или диапазона может возникнуть, если arg равен нулю.

Если реализация поддерживает арифметику с плавающей запятой IEEE (IEC 60559),

  • Если arg равен ±0, возвращается -∞ и возбуждается FE_DIVBYZERO .
  • Если arg равен ±∞, возвращается +∞.
  • Если arg является NaN, возвращается NaN.
  • Во всех остальных случаях результат является точным ( FE_INEXACT никогда не возбуждается) и текущий режим округления игнорируется.

Примечания

POSIX требует возникновения ошибки полюса, если arg равен ±0.

Значение экспоненты, возвращаемое функцией logb , всегда на 1 меньше, чем экспонента, возвращаемая функцией frexp , из-за различных требований к нормализации: для экспоненты e , возвращаемой функцией logb , |arg*r -e
|
находится в диапазоне от 1 до r (обычно между 1 и 2 ), но для экспоненты e , возвращаемой функцией frexp , |arg*2 -e
|
находится в диапазоне от 0.5 до 1 .

Пример

Сравнивает различные функции декомпозиции чисел с плавающей точкой.

#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");
}

Возможный вывод:

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

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.12.6.11 Функции logb (стр.: TBD)
  • 7.25 Обобщённая математика <tgmath.h> (стр.: TBD)
  • F.10.3.11 Функции logb (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.12.6.11 Функции logb (стр. 179-180)
  • 7.25 Обобщенная математика <tgmath.h> (стр. 373-375)
  • F.10.3.11 Функции logb (стр. 381)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.12.6.11 Функции logb (стр. 246)
  • 7.25 Обобщённая математика <tgmath.h> (стр. 373-375)
  • F.10.3.11 Функции logb (стр. 522)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.12.6.11 Функции logb (стр. 227)
  • 7.22 Обобщенная математика <tgmath.h> (стр. 335-337)
  • F.9.3.11 Функции logb (стр. 459)

Смотрите также

разбивает число на мантиссу и степень 2
(функция)
(C99) (C99) (C99)
извлекает экспоненту заданного числа
(функция)
(C99) (C99) (C99) (C99) (C99) (C99)
эффективно вычисляет число, умноженное на FLT_RADIX в указанной степени
(функция)