Spec-Zone.ru › C++

std::log, std::logf, std::logl

Определено в заголовке <cmath>
(1)
float       log ( float num );
double      log ( double num );
long double log ( long double num );
(до C++23)
/* floating-point-type */
            log ( /* floating-point-type */ num );
(с C++23)
(constexpr с C++26)
float       logf( float num );
(2) (с C++11)
(constexpr с C++26)
long double logl( long double num );
(3) (с C++11)
(constexpr с C++26)
Дополнительные перегрузки (с C++11)
Определено в заголовке <cmath>
template< class Integer >
double      log ( Integer num );
(A) (constexpr с C++26)
1-3) Вычисляет натуральный (по основанию e) логарифм num. Библиотека предоставляет перегрузки std::log для всех типов с плавающей точкой без квалификаторов cv в качестве типа параметра.(с C++23)
A) Дополнительные перегрузки предоставляются для всех целочисленных типов, которые рассматриваются как double. (с C++11)

Параметры

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

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

Если ошибки не возникло, возвращается натуральный (по основанию e) логарифм num (ln(num) или loge(num)).

Если произошла ошибка области определения, возвращается определённое реализацией значение (NaN, где поддерживается).

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

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

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

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

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

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

  • Если аргумент равен ±0, возвращается -∞ и поднимается FE_DIVBYZERO.
  • Если аргумент равен 1, возвращается +0.
  • Если аргумент отрицательный, возвращается NaN и поднимается FE_INVALID.
  • Если аргумент равен +∞, возвращается +∞.
  • Если аргумент равен NaN, возвращается NaN.

Примечания

Дополнительные перегрузки не обязаны предоставляться точно как (A). Они должны лишь быть достаточными для обеспечения того, что для своего аргумента num целочисленного типа, std::log(num) имеет тот же эффект, что и std::log(static_cast<double>(num)).

Пример

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
 
int main()
{
    std::cout << "log(1) = " << std::log(1) << '\n'
              << "base-5 logarithm of 125 = " << std::log(125) / std::log(5) << '\n';
 
    // special values
    std::cout << "log(1) = " << std::log(1) << '\n'
              << "log(+Inf) = " << std::log(INFINITY) << '\n';
 
    // error handling
    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
base-5 logarithm of 125 = 3
log(1) = 0
log(+Inf) = inf
log(0) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised

См. также

log10log10flog10l
(C++11)(C++11)
вычисляет десятичный (по основанию 10) логарифм (\({\small\log_{10}{x}}\)log10(x))
(функция)
log2log2flog2l
(C++11)(C++11)(C++11)
логарифм по основанию 2 данного числа (\({\small\log_{2}{x}}\)log2(x))
(функция)
log1plog1pflog1pl
(C++11)(C++11)(C++11)
натуральный логарифм (по основанию e) от 1 плюс данное число (\({\small\ln{(1+x)}}\)ln(1+x))
(функция)
expexpfexpl
(C++11)(C++11)
возвращает e в заданной степени (\({\small e^x}\)ex)
(функция)
log(std::complex)
комплексный натуральный логарифм с разрезами ветвей вдоль отрицательной вещественной оси
(функция-шаблон)
log(std::valarray)
применяет функцию std::log к каждому элементу valarray
(функция-шаблон)
C документация для log

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

Spec-Zone.ru

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