C++ 我刚刚读到 float 不精确并且不存储精确的整数值。这是什么意思?

标签 c++ floating-accuracy

我在二进制层面上考虑这个问题。

一个值为 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/

相关文章:

c++ - 为什么 numeric_limits Machine Epsilon 不满足 1+e>1 条件?

math - float 学有问题吗?

c++ - 休眠功能但不阻止其他功能和代码

c++ - 在 while 循环中,最后一个逗号分隔的语句是否保证最后运行?

C++获取编译代码中使用的一部分代码的大小

C++ 将数据从浮点 vector 复制到浮点对 vector

c++ - 在opencv中拼接2张图片

c - 浮点舍入错误将报告的结果移动到范围内

c++ - 更改关联性时的答案略有不同

F# - 如何比较 float