Сравните двойное с нулем, используя эпсилон
Сегодня я просматривал некоторый код C ++ (написанный кем-то другим) и нашел этот раздел:
double someValue = ...
if (someValue < std::numeric_limits<double>::epsilon() &&
someValue > -std::numeric_limits<double>::epsilon()) {
someValue = 0.0;
}
Я пытаюсь понять, имеет ли это смысл.
Документация дляepsilon()
говорит:
Функция возвращает разницу между 1 и наименьшим значением, превышающим 1, которое представимо [двойным].
Относится ли это и к 0, т.е.epsilon()
наименьшее значение больше 0? Или есть числа между0
а также0 + epsilon
который может быть представленdouble
?
Если нет, то сравнение не эквивалентноsomeValue == 0.0
?