Math.expm1()

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.expm1() は静的メソッドで、 e のある数値のべき乗から 1 を引いた値を返します。

𝙼𝚊𝚝𝚑.𝚎𝚡𝚙𝚖𝟷(𝚡)=ex1\mathtt{\operatorname{Math.expm1}(x)} = \mathrm{e}^x - 1

試してみましょう

構文

js
Math.expm1(x)

引数

x

数値です。

返値

ex - 1 を表す数値で、 e は自然対数の底です。

解説

x の値が非常に小さい場合、1 を加えることで精度が縮小したり、なくなったりすることがあります。 JS で使用する倍精度浮動小数点数では、約 15 桁の精度が得られます。 1 + 1e-15 = 1.000000000000001ですが、1 + 1e-16 = 1.000000000000000となり、 15 桁以降の数字は丸められるため、この演算ではちょうど 1.0 となります。

ex\mathrm{e}^x を計算する場合、ここで x が 0 にとても近い場合、 1 + x にとても近い答えが得られるはずです。それは、 limx0ex1x=1\lim_{x \to 0} \frac{\mathrm{e}^x - 1}{x} = 1 だからです。 Math.exp(1.1111111111e-15) - 1 を計算すると、 1.1111111111e-15 に近い答えが得られます。代わりに、 Math.exp の結果の有効数字が最も大きい数字であるため、単位桁は 1 となり、最終的な値は 1.1102230246251565e-15 となり、正しい数字は 3 桁だけとなります。 Math.exp1m(1.1111111111e-15) の代わりに計算すると、より正確な答え 1.1111111111000007e-15 が得られます。これは 11 桁の有効数字になります。

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

Math.expm1() の使用

js
Math.expm1(-Infinity); // -1
Math.expm1(-1); // -0.6321205588285577
Math.expm1(-0); // -0
Math.expm1(0); // 0
Math.expm1(1); // 1.718281828459045
Math.expm1(Infinity); // 無限大

仕様書

Specification
ECMAScript Language Specification
# sec-math.expm1

ブラウザーの互換性

BCD tables only load in the browser

関連情報