Почему в MATLAB realmax минус что-то еще равное realmax? - PullRequest
0 голосов
/ 30 августа 2018

В MATLAB, если я сделаю realmax - 1000000 == realmax, я получу логическую 1 (true) в качестве ответа. Почему это так?

1 Ответ

0 голосов
/ 30 августа 2018

Вы получите истинный результат, потому что значение 1000000 (то есть 1e6) намного меньше, чем относительная точность с плавающей запятой переменной для значений при или около максимальных пределов. Например:

>> 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 дает результат, который просто округляется до того, что было раньше.

Более подробные объяснения работы с числами с плавающей запятой здесь и здесь .

.
...