Spec-Zone.ru › C

log, logf, logl

Определено в заголовочном файле <math.h>
float       logf( float arg );
(1) (с C99)
double      log( double arg );
(2)
long double logl( long double arg );
(3) (с C99)
Определено в заголовочном файле <tgmath.h>
#define log( arg )
(4) (с C99)
1-3) Вычисляет натуральный (по основанию e) логарифм от arg.
4) Универсальное макрос: Если arg имеет тип long double, вызывается logl. В противном случае, если arg имеет целочисленный тип или тип double, вызывается log. В противном случае вызывается logf. Если arg комплексное или мнимое, макрос вызывает соответствующую комплексную функцию (clogf, clog, clogl).

Параметры

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

Значение возврата

Если ошибок не произошло, возвращается натуральный (по основанию e) логарифм от arg (ln(arg) или loge(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

Пример

#include <stdio.h>
#include <math.h>
#include <float.h>
#include <errno.h>
#include <fenv.h>
// #pragma STDC FENV_ACCESS ON
int main(void)
{
    printf("log(1) = %f\n", log(1));
    printf("base-5 logarithm of 125 = %f\n", log(125)/log(5));
    // special values
    printf("log(1) = %f\n", log(1));
    printf("log(+Inf) = %f\n", log(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("log(0) = %f\n", log(0));
    if(errno == ERANGE) perror("    errno == ERANGE");
    if(fetestexcept(FE_DIVBYZERO)) puts("    FE_DIVBYZERO raised");
}

Вывод:

log(1) = 0.000000
base-5 logarithm of 125 = 3.000000
log(1) = 0.000000
log(+Inf) = inf
log(0) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.12.6.7 Функции log (с. 178-179)
    • 7.25 Универсальные математические функции <tgmath.h> (с. 272-273)
    • F.10.3.7 Функции log (с. 380)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.12.6.7 Функции log (с. 244-245)
    • 7.25 Универсальные математические функции <tgmath.h> (с. 373-375)
    • F.10.3.7 Функции log (с. 522)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.12.6.7 Функции log (с. 225)
    • 7.22 Универсальные математические функции <tgmath.h> (с. 335-337)
    • F.9.3.7 Функции log (с. 459)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
    • 4.5.4.4 Функция log

См. также

log10log10flog10l
(C99)(C99)
вычисляет десятичный логарифм (\({\small \log_{10}{x} }\)log10(x))
(функция)
log2log2flog2l
(C99)(C99)(C99)
вычисляет логарифм по основанию 2 (\({\small \log_{2}{x} }\)log2(x))
(функция)
log1plog1pflog1pl
(C99)(C99)(C99)
вычисляет натуральный логарифм 1 плюс данное число (\({\small \ln{(1+x)} }\)ln(1+x))
(функция)
expexpfexpl
(C99)(C99)
вычисляет e в данной степени (\({\small e^x}\)ex)
(функция)
clogclogfclogl
(C99)(C99)(C99)
вычисляет комплексный натуральный логарифм
(функция)
Документация C++ для log

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/math/log

Spec-Zone.ru

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