为什么在 MATLAB 中 realmax 减去某些东西仍然等于 realmax?

Why in MATLAB is realmax minus something still equal to realmax?

在 MATLAB 中,如果我这样做 realmax - 1000000 == realmax,我会得到一个逻辑 1(真)作为答案。这是为什么?

您得到的结果是真实的,因为 1000000 的值(即 1e6)远小于处于或接近最大限制的值的 the floating point relative accuracy of a double precision variable。例如:

>> realmax-1e6==realmax  % Subtract 1 million

ans =
  logical

   1       % Still equal; not big enough to register a change

>> realmax-eps(realmax)==realmax  % Subtract the distance to the next largest value

ans =
  logical

   0       % Unequal; yeah, that's big enough to matter

简而言之,最大限制(即eps(realmax))的可表示数字之间的距离约为10^292。减去 很多 更小的值 1e6 得到的结果刚好四舍五入到原来的值。

您可以找到更全面的处理浮点数的解释here and here