我在二进制层面上考虑这个问题。
一个值为 1 的 float 和一个值为 1 的整数不会被编译成(这里省略了很多零)
0001
如果他们都编译成这样,那么这种不精确性从何而来。
我正在使用的资源是 http://www.cprogramming.com/tutorial/lesson1.html
谢谢。
最佳答案
这是可能的。 float 以指数表示法 (a*2^n) 表示,其中一些位表示 a(有效数),一些位表示 n(指数) .
由于所谓的 pigeonhole principle,您无法唯一地表示浮点值范围内的所有整数。例如,32 位 float 超过 10^38,但在 32 位上您只能表示 2^32 个值 - 这意味着一些整数将具有相同的表示形式。
现在,当您尝试执行以下操作时会发生什么:
x = 10^38 - (10^38 - 1)
你应该得到 1,但你可能不会,因为 10^38 和 10^38-1 彼此非常接近,以至于计算机必须以相同的方式表示它们。所以,你的1.0f通常会是1,但是如果这个1是计算出来的结果,就不一定了。
Here是一些例子。
关于C++ 我刚刚读到 float 不精确并且不存储精确的整数值。这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18548676/