コンテンツにスキップ

JavaScript/Math/log1p

出典: フリー教科書『ウィキブックス(Wikibooks)』

Math.log1p(x) は、1 + x の自然対数(底が e の対数)を返します。これは、x が非常に小さい場合に Math.log(1 + x) よりも高い精度で結果を返します[1]

  • 引数 xNaN の場合、NaN を返します。
  • 引数 x+0 の場合、+0 を返します。
  • 引数 x-0 の場合、-0 を返します。
  • 引数 x-1 の場合、-Infinity を返します。
  • 引数 xInfinity の場合、Infinity を返します。
  • 引数 x-1 より小さい場合、NaN を返します。

[編集]

log(1 + x) を計算するプログラム

[編集]

以下のプログラムは、ユーザーが入力した値の log(1 + x) を計算します。

constf=p=>{for(;;){a=prompt(`${p}は何ですか?`);if(!isNaN(a)&&a>=-1)returna;alert(`${p}に、入力ミスがあります。 "${a}"`);}}for(;;){constx=f("値");constlog1p=Math.log1p(x);if(!isNaN(log1p)){alert(`log(1 + ${x}) は ${log1p.toFixed(3)} です。`);break;}alert("入力が大きすぎます。");}

このプログラムでは、Math.log1p を使用して log(1 + x) を計算しています。ユーザーが入力した値が NaNInfinity の場合、適切に処理されます。

Math.log1pMath.log(1 + x) の比較

[編集]

以下のプログラムは、Math.log1pMath.log(1 + x) の結果を比較します。

constf=p=>{for(;;){a=prompt(`${p}は何ですか?`);if(!isNaN(a)&&a>=-1)returna;alert(`${p}に、入力ミスがあります。 "${a}"`);}}for(;;){constx=f("値");constlog1p=Math.log1p(x);constlog=Math.log(1+x);if(!isNaN(log1p)&&!isNaN(log)){alert(`log(1 + ${x}) は ${log1p.toFixed(3)} です。\nMath.log(1 + ${x}) は ${log.toFixed(3)} です。`);break;}alert("入力が大きすぎます。");}

このプログラムでは、Math.log1pMath.log(1 + x) の結果を比較しています。x が非常に小さい場合、Math.log1p の方が高い精度で結果を返すことがわかります。

注意点

[編集]
  • 精度: x が非常に小さい場合、Math.log(1 + x) は精度を失うことがありますが、Math.log1p は高い精度を維持します。
  • 戻り値の範囲: Math.log1p の戻り値は、-Infinity から Infinity の範囲です。

脚註

[編集]
  1. ^これは、x が小さい場合に Math.log(1 + x) が精度を失う問題を解決するために設計されています。

外部リンク

[編集]


close