log, logf, logl
Определено в заголовочном файле <math.h> | ||
|---|---|---|
float logf( float arg ); | (1) | (since C99) |
double log( double arg ); | (2) | |
long double logl( long double arg ); | (3) | (since C99) |
Определено в заголовочном файле <tgmath.h> | ||
#define log( arg ) | (4) | (since 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 <errno.h>
#include <fenv.h>
#include <float.h>
#include <math.h>
#include <stdio.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
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.12.6.7 Функции log (с. TBD)
- 7.25 Типо-обобщённая математика <tgmath.h> (с. TBD)
- F.10.3.7 Функции log (с. TBD)
- Стандарт 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
См. также
|
(C99)(C99) | вычисляет десятичный логарифм (по основанию 10) (\({\small \log_{10}{x} }\)log10(x)) (функция) |
|
(C99)(C99)(C99) | вычисляет логарифм по основанию 2 (\({\small \log_{2}{x} }\)log2(x)) (функция) |
|
(C99)(C99)(C99) | вычисляет натуральный логарифм (по основанию e) от единицы плюс заданное число (\({\small \ln{(1+x)} }\)ln(1+x)) (функция) |
|
(C99)(C99) | возводит e в заданную степень (\({\small e^x}\)ex) (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный натуральный логарифм (функция) |
Документация C++ для log |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/log