JavaScript/Math/log1p
表示
< JavaScript | Math
Math.log1p(x)
は、1 + x
の自然対数(底が e
の対数)を返します。これは、x
が非常に小さい場合に Math.log(1 + x)
よりも高い精度で結果を返します[1]。
- 引数
x
がNaN
の場合、NaN
を返します。 - 引数
x
が+0
の場合、+0
を返します。 - 引数
x
が-0
の場合、-0
を返します。 - 引数
x
が-1
の場合、-Infinity
を返します。 - 引数
x
がInfinity
の場合、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)
を計算しています。ユーザーが入力した値が NaN
や Infinity
の場合、適切に処理されます。
Math.log1p
と Math.log(1 + x)
の比較
[編集]以下のプログラムは、Math.log1p
と Math.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.log1p
と Math.log(1 + x)
の結果を比較しています。x
が非常に小さい場合、Math.log1p
の方が高い精度で結果を返すことがわかります。
注意点
[編集]- 精度:
x
が非常に小さい場合、Math.log(1 + x)
は精度を失うことがありますが、Math.log1p
は高い精度を維持します。 - 戻り値の範囲:
Math.log1p
の戻り値は、-Infinity
からInfinity
の範囲です。
脚註
[編集]- ^これは、
x
が小さい場合にMath.log(1 + x)
が精度を失う問題を解決するために設計されています。