From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../reference/global_objects/math/log1p/index.html | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 files/ja/web/javascript/reference/global_objects/math/log1p/index.html (limited to 'files/ja/web/javascript/reference/global_objects/math/log1p/index.html') diff --git a/files/ja/web/javascript/reference/global_objects/math/log1p/index.html b/files/ja/web/javascript/reference/global_objects/math/log1p/index.html new file mode 100644 index 0000000000..83b5350ab2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/log1p/index.html @@ -0,0 +1,104 @@ +--- +title: Math.log1p() +slug: Web/JavaScript/Reference/Global_Objects/Math/log1p +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log1p +--- +
{{JSRef}}
+ +

Math.log1p() 関数は、 1 + 数値の ({{jsxref("Math.E", "e")}} を底とする) 自然対数を返します。

+ +

x>-1,Math.log1p(x)=ln(1+x)\forall x > -1, \mathtt{\operatorname{Math.log1p}(x)} = \ln(1 + x)

+ +
{{EmbedInteractiveExample("pages/js/math-log1p.html")}}
+ + + +

構文

+ +
Math.log1p(x)
+ +

引数

+ +
+
x
+
数値です。
+
+ +

返値

+ +

1 + 与えられた数値の ({{jsxref("Math.E", "e")}} を底とした) 自然対数です。数値が -1 よりも小さかった場合は {{jsxref("NaN")}} が返されます。

+ +

解説

+ +

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

+ +

log(1 + x) を計算すると、 x が小さければ、 x にとても近い答えになるはずです (これが「自然」対数と呼ばれる所以です)。 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 未満であった場合、返値は常に {{jsxref("NaN")}} です。

+ +

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

+ +

ポリフィル

+ +

これは次の関数でエミュレートできます。

+ +
Math.log1p = Math.log1p || function(x) {
+  x = Number(x);
+  if (x < -1 || x !== x)
+    return NaN;
+  if (x === 0 || x === Infinity)
+    return x;
+
+  var nearX = (x + 1) - 1;
+
+  return nearX === 0 ? x : x * (Math.log(x + 1) / nearX);
+};
+
+ +

+ +

Math.log1p() の使用

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

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-math.log1p', 'Math.log1p')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.builtins.Math.log1p")}}

+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf