Matlab: найти следующее меньшее число с плавающей точкой - PullRequest
0 голосов
/ 09 мая 2018

Функция Matlab eps(x) возвращает «положительное расстояние от abs (x) до следующего большего числа с плавающей запятой той же точности, что и x».Я использую это для вычисления наименьшего числа с плавающей запятой, большего, чем x, через x + eps(x).Я также хотел бы получить наибольшее число с плавающей запятой меньше x, но я не знаю о функции, аналогичной eps, которая могла бы облегчить это.Как я могу найти наибольшее число с плавающей точкой меньше x?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Для всех чисел, кроме субнормальных (т. Е. Меньше, чем 2.225073.8585072014e-308), вы можете сделать:

v = 1 - eps()/2;
b = x / v; # next larger in magnitude
c = x * v; # next smaller in magnitude

(на основании этого ответа ).

0 голосов
/ 09 мая 2018

Вы можете вычесть eps в почти во всех случаях .

Однако, как вы, вероятно, поняли, это не относится к изменениям богомола или, другими словами, когда вы хотите вычесть из степени два.

Отрицательную сторону eps тогда легко реализовать, зная, что ток eps меньше расстояния до следующей степени двух, которая вызовет изменение шага. Следовательно, eps нашего числа за вычетом eps должно сработать.

function out=neps(in)

out=eps(in-eps(in));

Это, кажется, работает нормально

eps(2)

     4.440892098500626e-16

neps(2)

     2.220446049250313e-16
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...