DAVID马兰:现在,让我们打击你的头脑。 原来,在现实世界中1分 10的确1/10,或0.1。 但在计算机只具有有限的 位,用以号 代表数字,你不能总是 表示相同的1/10号与 完美的精确度。 换句话说,计算机有时有 作出判断来电和未 一定代表你数 想为你打算尽可能准确。 例如,假设我回去成 这个程序并更改为0.1, 哦,0.28,从而表明 我想的printf对printf到 28位的精度。 现在让我们保存和编译程序, 这个时候用make floats2。 用点斜线floats2运行它。 而且,亲爱的上帝,这次我看到的不是0.1, 但0.10000000,这是非常 好为止。 但随后,14901161193847656250。 那么,这是怎么回事? 嗯,事实证明,一个是浮动 通常存储在计算机的内部 与32位。 32显然是一个有限的数字,这 意味着你只能代表 由32比特的有限数 的浮点值。 不幸的是,这意味着该 电脑不能代表所有可能的 浮点数或实数, 存在于世界各地, 因为它只有这么多的位。 还等什么电脑是显然 在这种情况下所做的是代表1/10至 最接近的可能浮动 点值,它可以。 但是,如果我们看看,因为我们这里有,到28 小数位,我们开始看到, 不精确。 因此,这是一个问题 没有完美的解决方案。 我们可以用一个双而非浮动, 这往往要使用64比特作为 置为32。 但是,当然,64也是有限的, 所以这个问题会 即使双打依然存在。