Math.log1p()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Math.log1p() は静的メソッドで、 1 + x の(e を底とした)自然対数を返します。ここで x は引数です。

x>1,𝙼𝚊𝚝𝚑.𝚕𝚘𝚐𝟷𝚙(𝚡)=ln(1+x)\forall x > -1,\;\mathtt{\operatorname{Math.log1p}(x)} = \ln(1 + x)

試してみましょう

console.log(Math.log1p(1));
// Expected output: 0.6931471805599453

console.log(Math.log1p(0));
// Expected output: 0

console.log(Math.log1p(-1));
// Expected output: -Infinity

console.log(Math.log1p(-2));
// Expected output: NaN

構文

js
Math.log1p(x)

引数

x

-1 以上の数値です。

返値

1 + x の(e を底とした)自然対数です。 x が -1 の場合は、 -Infinity を返します。 x < -1 の場合は、 NaN が返されます。

解説

x の値が非常に小さかった場合、 1 を加えると有効精度が減少します。 JS で使用する倍精度浮動小数点型の精度は 15 桁です。 1 + 1e-15 = 1.000000000000001 ですが、 1 + 1e-16 = 1.000000000000000 となり、 15 桁を超えた桁は四捨五入されるため、正確に 1.0 となります。

log(1 + x) を計算すると、 x が小さければ、 x にとても近い答えになるはずです。 limx0log(1+x)x=1\lim_{x \to 0} \frac{\log(1+x)}{x} = 1 だからです。 Math.log(1 + 1.1111111111e-15) を計算すると、 1.1111111111e-15 に近い答えが得られるはずです。しかし、 1.00000000000000111022 の対数を取ることになります (四捨五入は二進数なので、時に醜い結果になることがあります) ので、答えは 1.11022…e-15 となり、正しい数字は 3 桁だけです。もし、代わりに Math.log1p(1.1111111111e-15) を計算した場合は、もっとずっと正確な答えである 1.1111111110999995e-15 が得られ、 15 桁の正しい数字が得られます (この場合は実際には 16 桁です)。

x の値が -1 未満であった場合、返値は常に NaN です。

log1p()Math の静的メソッドであるため、生成した Math オブジェクトのメソッドとしてではなく、常に Math.log1p() として使用するようにしてください (Math はコンストラクターではありません)。

Math.log1p() の使用

js
Math.log1p(-2); // NaN
Math.log1p(-1); // -Infinity
Math.log1p(-0); // -0
Math.log1p(0); // 0
Math.log1p(1); // 0.6931471805599453
Math.log1p(Infinity); // Infinity

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-math.log1p

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
log1p

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報