名前空間
変種
操作

log1p, log1pf, log1pl

From 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)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮動小数点操作
(C99)(C99)
(C99)(C23)
(C99)
縮小演算
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子および量子指数
Decimal再エンコーディング関数
総順序およびペイロード関数
分類
(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 - floating-point value

[編集] 戻り値

エラーが発生しなかった場合、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 が返されます。

[編集] 備考

関数 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("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 The log1p functions (p: TBD)
  • 7.25 Type-generic math <tgmath.h> (p: TBD)
  • F.10.3.9 The log1p functions (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.12.6.9 The log1p functions (p: TBD)
  • 7.25 Type-generic math <tgmath.h> (p: TBD)
  • F.10.3.9 The log1p functions (p: TBD)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.12.6.9 The log1p functions (p: 245)
  • 7.25 型総称数学関数 <tgmath.h> (p: 373-375)
  • F.10.3.9 The log1p functions (p: 522)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.12.6.9 The log1p functions (p: 226)
  • 7.22 型総称数学関数 <tgmath.h> (p: 335-337)
  • F.9.3.9 The log1p functions (p: 459)

[編集] 関連項目

(C99)(C99)
自然(底-e)対数を計算する (ln(x))
(関数) [編集]
常用(底-10)対数を計算する (log10(x))
(関数) [編集]
(C99)(C99)(C99)
底-2対数を計算する (log2(x))
(関数) [編集]
(C99)(C99)(C99)
指定されたべき乗のeから1を引いた値を計算する (ex-1)
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)