这是因为数据的储存结构的限制;使得这种单精度实数的有效数位一般为7位。数据在计算机中是以二进制的形式保存的,而有些十进制的小数是无法准确的化成二进制的,在单精度浮点型运算中要尽量避免过大的数和过小的数进行计算,这样会产生不小的误差;
那个 1/3 的例子其实不错。
这个可以这么理解,1/3 写成十进制写不下吧?人家是循环小数,不管你有多少位,都和 1/3 有误差。
同样道理,有的数,比如 0.1(是不是,我也没转,有兴趣的试下),虽然在十进制是有限的,但转成二进制之后正好是循环小数。而且本身存的位数又有限,即使不是循环小数也有可能写不下。没写下的四舍五入,就产生误差了。
具体想学 IEEE 的浮点数表示的话,相对复杂一点,而且这些知识其实在应用时没什么用。只有钻牛角尖地解释一些不能“理解”的现象时,才发挥用处。