log1p, log1pf, log1pl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Определено в заголовочном файле
<math.h>
|
||
|
float
log1pf
(
float
arg
)
;
|
(1) | (начиная с C99) |
|
double
log1p
(
double
arg
)
;
|
(2) | (начиная с C99) |
|
long
double
log1pl
(
long
double
arg
)
;
|
(3) | (начиная с C99) |
|
Определено в заголовочном файле
<tgmath.h>
|
||
|
#define log1p( arg )
|
(4) | (начиная с C99) |
log1pl
вызывается. В противном случае, если
arg
имеет целочисленный тип или тип
double
,
log1p
вызывается. В остальных случаях
log1pf
вызывается.
Содержание |
Параметры
| arg | - | значение с плавающей запятой |
Возвращаемое значение
Если ошибок не возникает, ln(1 + arg) возвращается.
Если происходит ошибка области определения, возвращается значение, определяемое реализацией (NaN, если поддерживается).
Если возникает ошибка полюса,
-
HUGE_VAL
,
-HUGE_VALF
, или
-HUGE_VALL
возвращается.
Если происходит ошибка диапазона из-за потери значимости (underflow), возвращается корректный результат (после округления).
Обработка ошибок
Ошибки сообщаются, как указано в math_errhandling .
Ошибка области определения возникает, если arg меньше -1 .
Ошибка полюса может возникнуть, если arg равен -1 .
Если реализация поддерживает арифметику с плавающей запятой IEEE (IEC 60559),
- Если аргумент равен ±0, он возвращается без изменений.
- Если аргумент равен -1, возвращается -∞ и FE_DIVBYZERO устанавливается.
- Если аргумент меньше -1, возвращается NaN и FE_INVALID устанавливается.
- Если аргумент равен +∞, возвращается +∞.
- Если аргумент равен NaN, возвращается NaN.
Примечания
Функции
expm1
и
log1p
полезны для финансовых расчетов, например, при вычислении небольших ежедневных процентных ставок:
(1+x)
n
-1
может быть выражено как
expm1
(
n
*
log1p
(
x
)
)
. Эти функции также упрощают написание точных обратных гиперболических функций.
Пример
#include <errno.h> #include <fenv.h> #include <float.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { printf("log1p(0) = %f\n", log1p(0)); printf("Процентный доход за 2 дня на $100, начисляемый ежедневно по 1%%\n" " по календарю 30/360 = %f\n", 100*expm1(2*log1p(0.01/360))); printf("log(1+1e-16) = %g, но log1p(1e-16) = %g\n", log(1+1e-16), log1p(1e-16)); // специальные значения printf("log1p(-0) = %f\n", log1p(-0.0)); printf("log1p(+Inf) = %f\n", log1p(INFINITY)); // обработка ошибок errno = 0; feclearexcept(FE_ALL_EXCEPT); printf("log1p(-1) = %f\n", log1p(-1)); if (errno == ERANGE) perror(" errno == ERANGE"); if (fetestexcept(FE_DIVBYZERO)) puts(" FE_DIVBYZERO raised"); }
Возможный вывод:
log1p(0) = 0.000000
Процентный доход за 2 дня на $100, начисляемый ежедневно по 1%
по календарю 30/360 = 0.005556
log(1+1e-16) = 0, но log1p(1e-16) = 1e-16
log1p(-0) = -0.000000
log1p(+Inf) = Inf
log1p(-1) = -Inf
errno == ERANGE: Result too large
FE_DIVBYZERO raised
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 7.12.6.9 Функции log1p (стр.: TBD)
-
- 7.25 Обобщённая математика <tgmath.h> (стр.: TBD)
-
- F.10.3.9 Функции log1p (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.12.6.9 Функции log1p (стр.: TBD)
-
- 7.25 Обобщённая математика <tgmath.h> (стр.: TBD)
-
- F.10.3.9 Функции log1p (стр.: TBD)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.12.6.9 Функции log1p (стр. 245)
-
- 7.25 Обобщенная математика <tgmath.h> (стр. 373-375)
-
- F.10.3.9 Функции log1p (стр. 522)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.12.6.9 Функции log1p (стр. 226)
-
- 7.22 Обобщённая математика <tgmath.h> (стр. 335-337)
-
- F.9.3.9 Функции log1p (стр. 459)
Смотрите также
|
(C99)
(C99)
|
вычисляет натуральный логарифм (по основанию
e
) (
\({\small \ln{x} }\)
ln(x)
)
(функция) |
|
(C99)
(C99)
|
вычисляет десятичный логарифм (по основанию
10
) (
\({\small \log_{10}{x} }\)
log
10
(x)
)
(функция) |
|
(C99)
(C99)
(C99)
|
вычисляет двоичный логарифм (по основанию 2) (
\({\small \log_{2}{x} }\)
log
2
(x)
)
(функция) |
|
(C99)
(C99)
(C99)
|
вычисляет
e
в заданной степени, минус один (
\({\small e^x-1}\)
e
x
-1
)
(функция) |
|
C++ documentation
для
log1p
|
|