std::log
Материал из cppreference.com
Определено в заголовочном файле <cmath> | ||
float log(float arg ); | (1) | |
double log(double arg ); | (2) | |
longdouble log(longdouble arg ); | (3) | |
double log( Integral arg ); | (4) | (начиная с C++11) |
1-3) Вычисляет натуральный (по основанию e) логарифм числа
arg
.4) Несколько перегрузок или шаблонов функций принимающих аргумент любого из интегральных типов. Эквивалентно 2) (аргумент приводится к double).
Содержание |
[править]Параметры
arg | — | значение вещественного типа или интегрального типа |
[править]Возвращаемое значение
При отсутствии ошибок, возвращается натуральный (по основанию e) логарифм arg
(то есть ln(arg) или log
e(arg)).
При возникновении domain-ошибки, возвращается определяемое реализацией значение (NaN если поддерживается)
При возникновении pole-ошибки, возвращается -HUGE_VAL
, -HUGE_VALF
или -HUGE_VALL
.
[править]Ошибки
Ошибки возникают в соответствии с определением math_errhandling
Domain-ошибка возникает, если arg
меньше нуля.
Pole-ошибка возникает, если arg
равен нулю.
Если реализации поддерживает IEEE вещественную арифметику (IEC 60559):
- Если аргумент равен ±0, возвращается -∞ и FE_DIVBYZERO возникает.
- Если аргумент равен 1, возвращается +0
- Если аргумент отрицательный, возращается NaN и FE_INVALID возникает.
- Если аргумент равен +∞, возвращается +∞
- Если аргумент является NaN, возвращается NaN
[править]Пример
Запустить этот код
#include <iostream>#include <cmath>#include <cerrno>#include <cstring>#include <cfenv>#pragma STDC FENV_ACCESS ONint main(){std::cout<<"log(1) = "<< std::log(1)<<'\n'<<"логарифм 125 по основанию 5 равен "<< std::log(125)/std::log(5)<<'\n';// граничные случаиstd::cout<<"log(1) = "<< std::log(1)<<'\n'<<"log(+Inf) = "<< std::log(INFINITY)<<'\n';// обработка ошибокerrno=0;std::feclearexcept(FE_ALL_EXCEPT);std::cout<<"log(0) = "<< std::log(0)<<'\n';if(errno==ERANGE)std::cout<<" errno == ERANGE: "<<std::strerror(errno)<<'\n';if(std::fetestexcept(FE_DIVBYZERO))std::cout<<" FE_DIVBYZERO raised\n";}
Возможный вывод:
log(1) = 0 логарифм 125 по основанию 5 равен 3 log(1) = 0 log(+Inf) = inf log(0) = -inf errno == ERANGE: Numerical result out of range FE_DIVBYZERO raised
[править]См. также
(C++11)(C++11) | вычисляет общий (с основанием 10) логарифм (log10(x)) (функция) |
(C++11)(C++11)(C++11) | логарифм по основанию 2 данного числа (log2(x)) (функция) |
(C++11)(C++11)(C++11) | натуральный логарифм (по основанию e) заданного числа плюс 1 (ln(1+x)) (функция) |
(C++11)(C++11) | возвращает e в заданной степени (ex) (функция) |
комплексный натуральный логарифм с ветвью, обрезанной по отрицательной действительной оси (шаблон функции) | |
применяет функцию std::log к каждому элементу valarray (шаблон функции) | |
Документация C по log |