오늘은 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
?에 해당하지 않습니까?
numeric_limits<>::epsilon
은 오도의 소지가 있고 관련이 없습니다. 우리가 원하는 것은 실제 값이 0에서 ε 이하로 차이가 나는 경우 0으로 가정하는 것입니다. 그리고 ε은 기계 종속 값이 아니라 문제 사양에 따라 선택해야합니다. 현재 엡실론은 쓸모가 없다고 생각합니다. 몇 번의 FP 작업만으로도 그보다 큰 오류가 누적 될 수 있습니다.