Предположим, у меня есть два числа с плавающей запятой, x
и y
, и их значения очень близки.
На компьютере может быть представлено дискретное количество чисел с плавающей запятой, поэтому мы можем перечислить их в порядке возрастания: f_1, f_2, f_3, ...
. Я хочу найти расстояние между x
и y
в этом списке (т.е. находятся ли они на 1, 2, 3, ... или n
дискретных шагах друг от друга?)
Возможно ли это сделать, используя только арифметические операции (+-*/
) и не глядя на двоичное представление? Меня в первую очередь интересует, как это работает на x86.
Правильно ли следующее приближение, если предположить, что y > x
и x
и y
находятся всего в нескольких шагах (скажем, <100) друг от друга? (Возможно нет ...)
(y-x) / x / eps
Здесь eps
обозначает машинный эпсилон. (Машинный эпсилон - это разница между 1.0 и следующим наименьшим числом с плавающей запятой.)
x
(не только наeps
).(y-x) / x / eps = (y-x) / (x*eps)
. Я все еще не уверен, что это правильно. - person Szabolcs   schedule 31.05.2011