主题:哥哥姐姐 ,我刚自学PASCAL,想问个问题
willzzs
[专家分:0] 发布于 2006-06-19 17:27:00
为什么实型数0。1加十次不一定能得到1。0
希望哥哥姐姐指教
回复列表 (共9个回复)
沙发
贺天行宝 [专家分:2300] 发布于 2006-06-20 18:08:00
实数本身是不精确的,有极小的误差
加分哦!
板凳
willzzs [专家分:0] 发布于 2006-06-20 20:57:00
那为什么实数是不精确的呢, 又不是无理数
3 楼
willzzs [专家分:0] 发布于 2006-06-20 21:04:00
必须按照2进制本质说明 就有分加 谢谢拉~~~~
4 楼
angeluseve [专家分:0] 发布于 2006-06-23 15:31:00
什么样的实数重复相加会出现这样的误差?二进制不能表示0.1吗?
5 楼
绿水中的鱼 [专家分:50] 发布于 2006-06-24 10:48:00
贺天大哥会被你们这样累死的,唉……你们要他从机器语言解释起啊!寒……
6 楼
贺天行宝 [专家分:2300] 发布于 2006-06-24 19:20:00
说实话,我也只知道个大概,你们要求太高了
7 楼
maxumi [专家分:2200] 发布于 2006-06-26 09:18:00
小数化二进制的方法:
比如0.3化二进制
先0.3 * 2 = 0.6
0.6比1小,所以二进制小数位的第一位是0.{每次的结果,比1小则此位为0,否则为1.}
0.6 * 2 = 1.2>1,所以二进制小数位的第2位是1.
1.2的小数部分为0.2.{每次的结果若比1大则下次取小数部分继续计算.}
0.2 * 2 = 0.4 < 1. 二进制小数位的第3位是0.
0.4 * 2 = 0.8 < 1. 二进制小数位的第4位是0.
0.8 * 2 = 1.6 > 1. 二进制小数位的第5位是1.
1.6的小数部分为0.6.
0.6 * 2 = 1.2 > 1. 二进制小数位的第6位是1.
1.2的小数部分为0.2.
从第三次0.2开始,转了一圈, 又回到了0.2.
所以0.3(十进制)=0.0100110011001100110011......(二进制)
无穷无尽.
而计算机中存储的二进制数位毕竟有限(32位),所以后面必定要截去.
这就是十个0.1不等于1的原因.
这帖够不够30?
8 楼
小田甜ts [专家分:210] 发布于 2006-07-01 18:09:00
这样说吧,你拿一个科学计算器输入1+1E30-1E30得到的结果是0而不是1这就是实型的误差。
9 楼
绿水中的鱼 [专家分:50] 发布于 2006-07-04 21:34:00
高手啊!!!!!!对二进制了解的这么透彻。
我来回复