Math.expm1()
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。
Math.expm1() は静的メソッドで、e をある数値のべき乗にした値から 1 を引いた値を返します。つまり、次のようになります。
試してみましょう
console.log(Math.expm1(0));
// 予想される結果: 0
console.log(Math.expm1(1));
// 予想される結果: 1.718281828459045
console.log(Math.expm1(-1));
// 予想される結果: -0.6321205588285577
console.log(Math.expm1(2));
// 予想される結果: 6.38905609893065
構文
Math.expm1(x)
引数
x-
数値です。
返値
ex - 1 を表す数値で、 e は自然対数の底です。
解説
x が非常に小さい場合、1 を加えると精度が低下したり、完全に失われたりすることがあります。JS で使われる倍精度浮動小数点数の精度は約 15 桁です。1 + 1e-15 = 1.000000000000001 ですが、1 + 1e-16 = 1.000000000000000 となります。15 桁より後の数字は丸められるため、この演算では結果がちょうど 1.0 になります。
を計算するとき、x が 0 に非常に近ければ、1 + x に非常に近い結果になるはずです。これは、 だからです。Math.exp(1.1111111111e-15) - 1 を計算すると、1.1111111111e-15 に近い結果が得られるはずです。しかし、Math.exp の結果では最上位の有効数字が 1 の位の 1 になるため、最終的な値は 1.1102230246251565e-15 となり、正しい桁は 3 桁だけになります。代わりに Math.expm1(1.1111111111e-15) を計算すると、11 桁の正しい有効数字を持つ、より正確な結果 1.1111111111000007e-15 が得られます。
expm1() は Math の静的メソッドであるため、生成した Math オブジェクトのメソッドとしてではなく、常に Math.expm1() として使用するようにしてください (Math はコンストラクターではありません)。
例
>Math.expm1() の使用
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); // Infinity
仕様書
| 仕様書 |
|---|
| ECMAScript® 2027 Language Specification> # sec-math.expm1> |