std::log
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <cmath>
|
||
float log( float arg ); |
(1) | |
double log( double arg ); |
(2) | |
long double log( long double 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 ON
int 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
| |