[C/C++课程节选]计算机中的浮点数

下面是我这个学期讲授的C/C++课程的内容节选。

废话少说,直接上代码。下面这段代码中,单精度浮点变量f1的值是1.2,f2是其1000000000000000倍(15个0)。然后我们把这两个数值显示到屏幕上。

float f1 = 1.2f;
float f2 =  f1 * 1000000000000000;
cout << std::fixed << std::setprecision(15) << f1 << endl;
cout << std::fixed << std::setprecision(0) << f2 << endl

其结果如下:

1.200000047683716
1200000038076416

首先变量f1不是完全等于1.2;其次,f2不是f1的1000000000000000倍。这个例子揭示了一个事实,我们一直认为计算机是无比精确的,事实并非如此;正好相反,在浮点数计算中,计算机从来无法做到精确。要知道,很多算法尤其是人工智能算法,基本上都是采用浮点数进行计算的,原来计算机一直在“糊弄”我们。

现在来解释一下这种现象的原因。

课程全部资料以开源方式实时公布到Github,请各位监督我备课。课程网址:https://github.com/ShiqiYu/CPP

课程视频录制后,我会第一时间放到B站供预览和学习;全部录完后再放到慕课网站学堂在线。B站网址  https://www.bilibili.com/video/BV1Vf4y1P7pq ,或者长按下方二维码访问。前四周的视频已经全部上传。

a7c78d2704ba4c3bce6f8d47908c3b74.png

ab3396a7a1984f192e6a0b320629c116.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值