回 帖 发 新 帖 刷新版面

主题:哥哥姐姐 ,我刚自学PASCAL,想问个问题

为什么实型数0。1加十次不一定能得到1。0
希望哥哥姐姐指教

回复列表 (共9个回复)

沙发

实数本身是不精确的,有极小的误差



加分哦!

板凳

那为什么实数是不精确的呢,  又不是无理数

3 楼

必须按照2进制本质说明  就有分加  谢谢拉~~~~

4 楼

什么样的实数重复相加会出现这样的误差?二进制不能表示0.1吗?

5 楼

贺天大哥会被你们这样累死的,唉……你们要他从机器语言解释起啊!寒……

6 楼

说实话,我也只知道个大概,你们要求太高了

7 楼

小数化二进制的方法:
比如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 楼

这样说吧,你拿一个科学计算器输入1+1E30-1E30得到的结果是0而不是1这就是实型的误差。

9 楼

高手啊!!!!!!对二进制了解的这么透彻。

我来回复

您尚未登录,请登录后再回复。点此登录或注册