试一试
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 的数字。
返回值
x + 1 的自然对数(以 e 为底)。如果 x 是 -1,则返回 -Infinity。如果 x < -1,则返回 NaN。
描述
对于非常小的 x 值,加 1 可能会降低或消除精度。JS 中使用的双精度浮点数提供了大约 15 位数字的精度。1 + 1e-15 = 1.000000000000001,但 1 + 1e-16 = 1.000000000000000,因此在该算术中恰好为 1.0,因为超过 15 位的数字会被四舍五入。
当您计算 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,则返回值始终为 NaN。
由于 log1p() 是 Math 的静态方法,您始终将其用作 Math.log1p(),而不是作为您创建的 Math 对象的某个方法(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
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-math.log1p |
浏览器兼容性
加载中…