log1p, log1pf, log1pl

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大/最小运算
(C99)
(C99)
指数函数
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
log1plogp1
(C99)(C23)
(C23)
(C23)
幂函数
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
三角及双曲函数
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
浮点数的临近整数
(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮点数操作
(C99)(C99)
(C99)(C23)
(C99)
窄化运算
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量与量指数函数
十进制重编码函数
全序与载荷函数
分类
误差及伽马函数
(C99)
(C99)
(C99)
(C99)
类型
宏常量
特殊浮点数值
(C99)(C23)
参数与返回值
错误处理
快速运算指示
 
在标头 <math.h> 定义
float       log1pf(float arg );
(1) (C99 起)
double      log1p(double arg );
(2) (C99 起)
longdouble log1pl(longdouble arg );
(3) (C99 起)
在标头 <tgmath.h> 定义
#define log1p( arg )
(4) (C99 起)
1-3) 计算 1+ arg 的自然(以 e 为底)对数。若 arg 接近零,则此函数比表达式 log(1  +arg) 更精确。
4) 泛型宏:若 arg 拥有 longdouble 类型,则调用 log1pl。否则,若 arg 拥有整数类型或 double 类型,则调用 log1p。否则调用 log1pf

目录

[编辑]参数

arg - 浮点数

[编辑]返回值

若不出现错误则返回 ln(1 + arg)

若出现定义域错误,则返回实现定义值(受支持平台上为 NaN)。

若出现极点错误,则返回 -HUGE_VAL-HUGE_VALF-HUGE_VALL

若出现下溢所致的值域错误,则返回(舍入后的)正确结果。

[编辑]错误处理

报告 math_errhandling 中指定的错误。

arg 小于 -1 则出现定义域错误。

arg-1 则可能出现极点错误。

若实现支持 IEEE 浮点数算术(IEC 60559),则

  • 若实参为 ±0,则返回不修改的参数。
  • 若实参为 -1,则返回 -∞ 并引发 FE_DIVBYZERO
  • 若实参小于 -1,则返回 NaN 并引发 FE_INVALID
  • 若实参为 +∞,则返回 +∞。
  • 若实参为 NaN,则返回 NaN。

[编辑]注意

函数 expm1log1p 对于金融计算有用:例如在计算小的日利率时:(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("以 30/360 日历计算,复合日利率 1%%,则 $100 经 2 日获利 = %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 以 30/360 日历计算,复合日利率 1%,则 $100 经 2 日获利 = 0.005556 log(1+1e-16) = 0, but 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 The log1p functions (第 TBD 页)
  • 7.25 Type-generic math <tgmath.h> (第 TBD 页)
  • F.10.3.9 The log1p functions (第 TBD 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 7.12.6.9 The log1p functions (第 TBD 页)
  • 7.25 Type-generic math <tgmath.h> (第 TBD 页)
  • F.10.3.9 The log1p functions (第 TBD 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.12.6.9 The log1p functions (第 245 页)
  • 7.25 Type-generic math <tgmath.h> (第 373-375 页)
  • F.10.3.9 The log1p functions (第 522 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.12.6.9 The log1p functions (第 226 页)
  • 7.22 Type-generic math <tgmath.h> (第 335-337 页)
  • F.9.3.9 The log1p functions (第 459 页)

[编辑]参阅

(C99)(C99)
计算自然对数(底为 e)(ln(x)
(函数)[编辑]
计算常用对数 (底为 10)(log10(x)
(函数)[编辑]
(C99)(C99)(C99)
计算底为 2 的对数(log2(x)
(函数)[编辑]
(C99)(C99)(C99)
计算 e 的给定次幂减一(ex-1
(函数)[编辑]
log1p 的 C++ 文档
close