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) を計算します。
const f = p => { for (;;) { a = prompt(`${p}は何ですか?`); if (!isNaN(a) && a >= -1) return a; alert(`${p}に、入力ミスがあります。 "${a}"`); } } for (;;) { const x = f("値"); const log1p = 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) の結果を比較します。
const f = p => { for (;;) { a = prompt(`${p}は何ですか?`); if (!isNaN(a) && a >= -1) return a; alert(`${p}に、入力ミスがあります。 "${a}"`); } } for (;;) { const x = f("値"); const log1p = Math.log1p(x); const log = 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)が精度を失う問題を解決するために設計されています。
外部リンク
[編集]