名稱空間
變體
操作

log1p, log1pf, log1pl

來自 cppreference.com
< c‎ | 數值‎ | 數學
 
 
 
常用數學函式
函式
基本操作
(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)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮點數操作
(C99)(C99)
(C99)(C23)
(C99)
窄化操作
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子與量子指數
十進位制重新編碼函式
總序和載荷函式
分類
(C99)
(C99)
(C99)
(C23)
誤差函式和伽馬函式
(C99)
(C99)
(C99)
(C99)
型別
宏常量
特殊浮點值
(C99)(C23)
引數和返回值
錯誤處理
快速操作指示符
 
定義於標頭檔案 <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 起)
1-3) 計算 1 + arg 的自然對數(底為 e)。如果 arg 接近於零,此函式比表示式 log(1 + arg) 更精確。
4) 泛型宏:如果 arg 的型別是 long double,則呼叫 log1pl。否則,如果 arg 具有整型或型別 double,則呼叫 log1p。否則,呼叫 log1pf

目錄

[編輯] 引數

arg - 浮點值

[編輯] 返回值

如果沒有發生錯誤,返回 ln(1 + arg)

如果發生域錯誤,則返回實現定義的值 (支援 NaN 時返回 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("Interest earned in 2 days on $100, compounded daily at 1%%\n"
           " on a 30/360 calendar = %f\n",
           100*expm1(2*log1p(0.01/360)));
    printf("log(1+1e-16) = %g, but log1p(1e-16) = %g\n",
           log(1+1e-16), log1p(1e-16));
 
    // special values
    printf("log1p(-0) = %f\n", log1p(-0.0));
    printf("log1p(+Inf) = %f\n", log1p(INFINITY));
 
    // error handling
    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
Interest earned in 2 days on $100, compounded daily at 1%
 on a 30/360 calendar = 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 log1p 函式 (p: TBD)
  • 7.25 型別通用數學 <tgmath.h> (p: TBD)
  • F.10.3.9 log1p 函式 (p: TBD)
  • C17 標準 (ISO/IEC 9899:2018)
  • 7.12.6.9 log1p 函式 (p: TBD)
  • 7.25 型別通用數學 <tgmath.h> (p: TBD)
  • F.10.3.9 log1p 函式 (p: TBD)
  • C11 標準 (ISO/IEC 9899:2011)
  • 7.12.6.9 log1p 函式 (p: 245)
  • 7.25 型別通用數學 <tgmath.h> (p: 373-375)
  • F.10.3.9 log1p 函式 (p: 522)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.12.6.9 log1p 函式 (p: 226)
  • 7.22 型別通用數學 <tgmath.h> (p: 335-337)
  • F.9.3.9 log1p 函式 (p: 459)

[編輯] 亦參見

(C99)(C99)
計算自然(底數e)對數 (ln(x))
(函式) [編輯]
計算常用(底數10)對數 (log10(x))
(函式) [編輯]
(C99)(C99)(C99)
計算以2為底的對數 (log2(x))
(函式) [編輯]
(C99)(C99)(C99)
計算 e 的給定冪,減一 (ex-1)
(函式) [編輯]
C++ 文件 對應 log1p