我知道在浮点数运算中,由于舍入误差,x(1/x)可能不会精确等于1。这种情况下,最小的正整数x应该是49。
我原以为如果在浮点数运算中1/x可以精确表示,那么x(1/x)应该精确等于1,但是我的教授说实际情况比这复杂,并且举了5作为例子。我就是想不出还有什么其他原因。有人可以给我一个提示吗?提前谢谢!
我原以为如果在浮点数运算中1/x可以精确表示,那么x(1/x)应该精确等于1,但是我的教授说实际情况比这复杂,并且举了5作为例子。我就是想不出还有什么其他原因。有人可以给我一个提示吗?提前谢谢!
printf("%.*g\n", DBL_DECIMAL_DIG, 1.0/5.0);
1/x
时,可能会出现一个舍入误差(可能为零)。当将其结果乘以x
时,可能会出现另一个舍入误差。有时候舍入误差会朝相反的方向发生,从而互相抵消。但有时候则不会。 - undefined1<=x<2
的情况(忽略次标准和非有限情况)。然后检查1/x
的舍入误差最多可以有多少,计算(1/x+error)*x = 1 + error*x
并观察error * x
何时可能大于epsilon
。不确定你是否可以轻松确定哪些x
实际上会导致错误,但你可以排除很多情况,例如,我认为x<1.5
应该总是舍入回到1。 - undefinedx=561/512
就是一个反例。 - undefined1.0/5 = 0.2
--> 不对。所有有限的二进制IEEE-754数都是有限整数乘以有限次幂的2。0.2不能被一个常见的double
精确表示。 - undefined