计算机的错误计算(二十一)

摘要  两个不相等数相减,差为0:20^{65}-20^{65-0.1^{15}}=0 ?

       在计算机的错误计算(十九)中,高中生小明发现本应为0的算式结果不为0. 今天他又发现对本不为0的算式,计算机的输出为0.

       在 Python 中计算 20^{65}-20^{65-0.1^{15}}

则输出为0.

       若用 C语言计算:

double \,\,a=20, \,\,b=65, \,\,c=65-1e-15;\\ printf("\%lf",pow(a,b)-pow(a,c));

则同样为0.

       对此错误输出,小明仔细分析后,突然明白其发生错误的原因。

       请问,您看出了吗?因为双精度下,53 位的二进制位数有限,所以 65-0.1^{15}=64.999999999999999 的结果仍然为 65:

(65)_{10}-(0.000000000000001)_{10}\\\approx(\underbrace{1000001}_{\textup{\textcolor{red}{7 digits}}})_2-(0.\underbrace{000...0}_{\textup{\textcolor{red}{49 zeros}}}\underbrace{\textcolor{blue}{1001000...10101}}_{\textup{53 digits}})_2\\\approx(\underbrace{1000001}_{\textup{7 digits}})_2\\=(65)_{10}\,.

主要是 7+49>53,所以后面蓝颜色的 53位数字全舍弃了。

       最后问一句:若计算机给出的答案是0,那么如何判断其正确与否?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值