指数和对数
指数和对数是数学中描述“变化”和“尺度”的一对逆运算,就像加法和减法一样。
指数
在数学中,给定一个数a,将其自身连乘n次,得到的结果表示为 an(其中a≠0),这被称为幂运算。其中,a被称为底数,n被称为指数。
在JavaScript中,如果求数字3连乘4次的结果,可使用指数操作符**:
let r = 3 ** 4结果为81。
也可以使用Math.pow函数来求值,其中,pow是power的简写:
let r = Math.pow(3, 4)结果是一样的。
另外,当指数n为0时,对于任何非零的底数a,幂运算的结果定义为1,即 a0 = 1。
自然常数e
特别的,当a的值为一个特殊的常数(约等于2.71828)时,如果对其进行幂运算,除了上面的方法外,还可以使用函数Math.exp求值,其中,exp是 exponential 的简写:
let r2 = Math.exp(3)exp(3)表示以e为底,以3为指数进行幂运算,结果约等于20.0855。
在JavaScript中,用Math.E表示这个特殊的常数。这个常数被称为自然常数(或欧拉常数)。它和Math.PI一样,是数学中最重要的常数之一,在数学中,用e表示。
指数函数
数学中,指数函数是指:底数为固定常数,指数为自变量的函数,其一般形式为 f(x) = ax。其中,a>0且a≠1。
在前面的例子中,我们使用了Math.pow函数或 ** 来求得一个常量a的n次幂。
特别的,对于以e为底的常数,还可以使用Math.exp函数来求它的n次幂结果,数学中表示为 f(x)=ex,也记作exp(x)。
对数
现在,我们知道可以用指数函数来求 e 的n次幂了。反过来,如果给定一个幂运算的结果,求e的指数呢?
可以使用对数函数Math.log来求:
let n = Math.log(r2)结果为3。
在数学中,对数的定义如下:如果ax=N,则x被称为以a为底N的对数,记作x=logaN。
自然对数是以e为底数的对数,记作ln(x)。如果e^y = x,那么y = ln(x)。
两者关系
可以看到,两者互为逆运算。指数计算是“问结果”:2的3次方等于几?对数计算是“问次数”:2的几次方等于8?
指数函数ax的反函数是对数函数logax。
自然指数函数ex的反函数为自然对数函数logex,也记作ln(x)。
在JavaScript中,使用Math.log(x)来表示自然对数函数。
注意⚠️:在JavaScript中,Math.log(x)方法只能求以e为底的对数。如果要求以2为底的对数,还可以使用Math.log2(x)方法,比如:Math.log2(8)结果为3。但如果要求5为底的对数,就需要用换底公式来进行计算:
function getBaseLog(base, value) {
return Math.log(value) / Math.log(base);
}
let exponent = getBaseLog(5, 25);
console.log(exponent); // 输出: 2因为JS没有直接提供“任意底数对数”的API,所以,需要做一个转换。
现实世界的用处
现实世界中,我们经常会遇到指数增长。
例如,一个细菌数量,N=2^t。那么:
- 当t为1,N为2;
- t为2,N为4;
- t为10,N为1024;
- t为20;N为1,048,576。
指数,反映了数据变化的剧烈程度。
如果现在反过来问:已经有 1024 个细菌,大约经过了多少个周期?
这就不是简单的乘除法了,而是log2x。
对数,就是解决这种“指数反问题”的工具。
所以,对数在计算机科学、物理学、金融、信息论等领域都非常常见。
总结
指数描述“变化有多剧烈”,对数描述“要达到这个剧烈程度,需要翻多少倍”。它们共同帮人类理解从微观细胞到宏观宇宙的尺度问题。