跳到主要内容

乘法为什么能变成加法

✖️ 乘法之所以能变成加法,本质上是通过一种变换,把“数值的倍增关系”转换为“指数的累加关系”。最常用的工具是对数

一、核心公式

对于正数 a>0a>0b>0b>0,有:

logb(xy)=logbx+logby\log_b(xy)=\log_b x+\log_b y

这里左边原本是 xxyy 的乘法,取对数以后变成了右边的加法。

反过来:

xy=blogbx+logbyxy=b^{\log_b x+\log_b y}

如果使用自然对数 ln\ln,对应的反函数是指数函数 exe^x

xy=elnx+lnyxy=e^{\ln x+\ln y}

因此,使用对数计算乘法可以分成三步:

  1. 分别对两个因子取对数。
  2. 把两个对数相加。
  3. 对结果取反对数,恢复原来的乘积。

二、为什么对数能把乘法变成加法

设:

x=bm,y=bnx=b^m,\qquad y=b^n

那么:

xy=bmbn=bm+nxy=b^m\cdot b^n=b^{m+n}

根据对数的定义:

m=logbx,n=logbym=\log_b x,\qquad n=\log_b y

所以:

logb(xy)=m+n=logbx+logby\log_b(xy)=m+n=\log_b x+\log_b y

关键是同底数幂的规则:

bmbn=bm+nb^m\cdot b^n=b^{m+n}

对数记录的不是数本身,而是“底数需要乘自己多少次”。 两个数相乘时,它们的指数相加,因此在对数空间里,乘法自然表现为加法。

三、具体例子

计算:

100×1000100\times1000

以 10 为底取对数:

log10100=2\log_{10}100=2 log101000=3\log_{10}1000=3

把乘法变成加法:

2+3=52+3=5

再取反对数:

105=10000010^5=100000

因此:

100×1000=100000100\times1000=100000

四、推广到多个数

对于任意一组正数 x1,x2,,xnx_1,x_2,\ldots,x_n

ln(x1x2xn)=lnx1+lnx2++lnxn\ln(x_1x_2\cdots x_n)=\ln x_1+\ln x_2+\cdots+\ln x_n

所以:

x1x2xn=exp(i=1nlnxi)x_1x_2\cdots x_n=\exp\left(\sum_{i=1}^{n}\ln x_i\right)

原来的连续乘法被转换成了连续加法。

五、除法、乘方和开方也会被简化

原运算取对数后
xyxylogx+logy\log x+\log y
x/yx/ylogxlogy\log x-\log y
xnx^nnlogxn\log x
xn\sqrt[n]{x}1nlogx\frac{1}{n}\log x

这意味着:

  • 乘法变加法;
  • 除法变减法;
  • 乘方变乘法;
  • 开方变除法。

这也是历史上对数表和计算尺能够简化复杂计算的原因。

六、负数和零怎么处理

在实数范围内,lnx\ln x 只对 x>0x>0 有定义,所以不能直接对负数或零取自然对数。

负数

可以把符号和绝对值分开处理:先计算绝对值的对数之和,再根据负因子的数量恢复符号。

ixi=(isgn(xi))exp(ilnxi)\prod_i x_i=\left(\prod_i \operatorname{sgn}(x_i)\right)\exp\left(\sum_i\ln|x_i|\right)

只要乘积中存在一个零,整个乘积就是零。由于 ln0\ln 0 没有有限值,实际计算时通常先单独检查零。

七、计算机中的实际用途

当大量很小的数相乘时,结果可能小到超出浮点数可表示的范围,发生下溢。例如:

P=p1p2pnP=p_1p_2\cdots p_n

可以改到对数空间:

lnP=lnp1+lnp2++lnpn\ln P=\ln p_1+\ln p_2+\cdots+\ln p_n

程序只需要累加对数,既更稳定,也更容易处理极大或极小的数。因此,对数似然、交叉熵、Softmax 和许多概率算法都会使用对数空间。

八、更抽象的理解

“把乘法变成加法”是在寻找一种函数 ff,满足:

f(xy)=f(x)+f(y)f(xy)=f(x)+f(y)

在正实数上,如果要求 ff 具有连续性等常见条件,这类函数本质上就是对数函数:

f(x)=clnxf(x)=c\ln x

因此,对数是连接正数乘法结构与实数加法结构的自然桥梁:

(R>0,×) ln (R,+)(\mathbb{R}_{>0},\times)\xrightarrow{\ \ln\ }(\mathbb{R},+)

一句话总结:乘法在原始数值空间中发生,而加法在对数空间中发生;取对数进入对数空间,取指数返回原始空间。