不是整形和双精度的问题,是计算机目前能达到的精度问题。
当代码写成 double i; i!=10; 的时候,第一遍扫描就已经自动把 10 转换为双精度 10.0f 了。问题是双精度表示,计算机目前精度只到达 64bit,也就意味着,根本没办法达到 10.0f 的无限双精度的精确度。因此,这个代码的判断永远不会满足。
这个例子看上去好像是某个教科书上的一个教案,目的是让同学们了解,浮点、双精度数做比较的时候,永远不要想当然地用等于和不等于去判别,另外,也暗示循环次数尽量不要使用浮点、双精度数,因为对计算机硬件有依赖,并且会导致意想不到的问题。