计算机的错误计算(十九)

摘要  两个等价大数相减,差不是正确值0,而是一个大数:20^{65}-e^{65\times\ln(20)} \approx 6e70 \,\,\textcolor{red}{???}

       同事儿子小明在上高中,刚学了两个公式:

\left\{\begin{matrix} e^{\ln(x)}& =&x, \\ \ln(x^n)& = & n\ln(x),\end{matrix}\right.

便试着用 Python 编程计算 20^{65}-e^{65\times\ln(20)}

结果呢?从上看出,输出不是正确答案0,而是一个有着 71 位整数的数:6.125299882776625e70.

        Python的输出让他感到很是奇怪,于是又用C语言计算:

printf("\%lf",pow((double)20,65)-exp(65*log((double)20)));

这一下他彻底懵了:输出很相似,为 6.2115717121115074e70.

       后又在 Excel 的单元格中计算:

20^65-exp(65*ln(20))

其输出更接近于C语言的输出: 6.2115717121115100e70.

        3个结果均是含有 71位整数的数值,但是,又不完全相同。这让小明很是不解;同时想到这可能不是偶然的。这种输出与想法致使小明对计算机十分失望,失去了兴趣。

       小明的想法是什么?错误计算不是偶然的。那么,您能给出另外一个错误吗?其实很容易:将 20 改成 30,或20.001,等等。您试试?或修改65为66,或77,等等。

       最后,这究竟是怎么回事?且听下回分解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值