0.52 的(负)幂,这意味着它可以由 IEEE-754 二进制浮点格式完全表示。在信号精度中它是 0'01111110'00000000000000000000000

根据我关闭优化( -O0 )的快速测试,结果是如果 y = 0.5 * x ,则 y + y == x 。但它总是由 IEEE-754 标准保证吗?

我知道一般来说,如果 n2 的正整数幂,并且 m = 1.0 / ny = m * x ,那么将 y 加在一起 ​​n 次不会产生 x 。但似乎用 n = 2 是的。

我错过了什么吗?

最佳答案

不,这是一个带有 double 精度浮点的简单计数器示例:

double x = 4.9E-324; // minimum positive value
double y = x * 0.5; // this doesn't only look like a zero this positive zero all 0 bits
bool test = y + y == x; // false

IEEE-754 下的浮点数精度有限,除以 2 时可能会丢失信息。在大多数情况下,当使数字变小时,您可以获得准确度,您可以减小指数,但如上所述,这并不总是足够的。有时你不能减少指数。

任何具有最小指数和奇数尾数的东西都不会保持相等。这样的例子是 x = 5.0E-322

10-07 16:44