js对数运算法则(JavaScript用Math.log1p求自然对数)

js对数运算法则(JavaScript用Math.log1p求自然对数)(1)

1. 基本概念

Math.log1p()方法的作用和Math.log()方法非常相近,它们都是用于计算一个数的自然对数。自然对数就是以自然常数e为底数的对数,在数学上也等价地表示为ln(x)。

调用Math.log1p()方法的语法形式如下所示:

Math.log1p(x);

上面我们说到了Math.log1p()和Math.log()的相同之处,那么它们又有什么不同呢?区别就在于它们各自是对哪一个数求自然对数,这个数和它们的参数有什么关系。

我们将Math.log1p()的方法名分成三部分,分别为:log、1和p。其中log就是“求对数”的意思,1就是数字1;而p表示“plus”,即加法。因此Math.log1p()中的1p就表示“1加上”的意思,那么到底加上什么呢?当然就是后面括号中的参数了。所以Math.log1p()就是先计算1加上它的参数的和,再计算该和的自然对数。

Math.log()方法名中没有1p,也就是不需要加1而直接对它的参数求自然对数,因此Math.log(x)等于ln(x)而Math.log1p(x)等于ln(1 x)。

对参数x的要求就是它应该是一个数字,即x属于Number类型;如果不是,那么它会先被自动转换为Number类型。

js对数运算法则(JavaScript用Math.log1p求自然对数)(2)

图1 ln(1 x)的函数图像

图1展示了ln(1 x)的函数图像,结合该图像以及当参数x为特殊值时,我们来详细说明JavaScript是如何判定Math.log1p()方法的结果的。

1. 如果x是NaN,那么结果是NaN;

2. 如果x小于-1,那么结果是NaN;因为此时x在函数的定义域之外;

3. 如果x是-1,那么结果是负无穷(-Infinity);严格来说此时x也在函数定义域之外,但JavaScript这样处理也说得过去,因为当x趋近于-1时ln(1 x)趋近于负无穷;

4. 如果x是 0,那么结果是 0;

5. 如果x是-0,那么结果是-0;

6. 如果x是正无穷( Infinity),那么结果是正无穷;

7. 其余情况下,x是普通数字并且在函数的定义域内,因此结果就是ln(1 x)的值。

如果你传递的x不是数字,那么上面这些规则中提到的x的值指的是它被转换为数字后的值。这些规则看似很多、很杂乱,但它们在本质上都是计算函数ln(1 x)的值,结合函数图像以及JavaScript有五个特殊数字(NaN、 0、-0、正无穷和负无穷)可以很容易地理解它们。

2. 示例

<script> /* 下面3个方法调用中,参数都是普通数字 */ var value1 = Math.log1p(-6); console.log("Math.log1p(-6):"); console.log(value1); var value2 = Math.log1p(-1); console.log("\nMath.log1p(-1):"); console.log(value2); var value3 = Math.log1p(20); console.log("\nMath.log1p(20):"); console.log(value3); /* 下面4个方法调用中的参数都是特殊数字 */ var value4 = Math.log1p(NaN); console.log("\nMath.log1p(NaN):"); console.log(value4); var value5 = Math.log1p( 0); console.log("\nMath.log1p( 0):"); console.log(value5); var value6 = Math.log1p(-0); console.log("\nMath.log1p(-0):"); console.log(value6); var value7 = Math.log1p( Infinity); console.log("\nMath.log1p( Infinity):"); console.log(value7); /* * false转换成数字为 0,因此 * Math.log1p(false)等价于Math.log1p(0) */ var value8 = Math.log1p(false); console.log("\nMath.log1p(false):"); console.log(value8); </script>

以上代码的执行结果如图2所示:

js对数运算法则(JavaScript用Math.log1p求自然对数)(3)

图2 Math.log1p()方法的执行结果

(完)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页