문제를 간단히 말하면 에 a/(b - c)
이라는 표현식을 계산하려고한다고 가정 해 봅시다. "엡실론"은 실제로 부동 소수점 계산에서 어떤 것도 보장합니까?
b
및
c
가 동일한에 있다면 내가 확인하실 수 있습니다, 결과는 의미가 있는지 확인하려면 다음
float EPS = std::numeric_limits<float>::epsilon();
if ((b - c) > EPS || (c - b) > EPS)
{
return a/(b - c);
}
을하지만 내 테스트는 의미있는 결과도 제공하기 위해 실패하지 하나를 보장하는 것만으로는 충분하지 않습니다 보여 가능한 경우 결과.
사례 1 :
a = 1.0f;
b = 0.00000003f;
c = 0.00000002f;
결과 : (가) 조건이 충족되지 않으면,하지만 표현 (수레 '정밀도로) 올바른 결과 100,000,008을 생산한다.
사례 2 :
a = 1e33f;
b = 0.000003;
c = 0.000002;
결과 : (가) 조건이 충족되는 경우,하지만 표현이 의미있는 결과 +1.#INF00
을하지 생성합니다.
const float INF = numeric_limits<float>::infinity();
float x = a/(b - c);
if (-INF < x && x < INF)
{
return x;
}
그러나 왜 모두가 엡실론 사용하는 것이 좋다 말하고 엡실론은 다음 때문이다 :
내가 아니라 인수, 훨씬 더 신뢰할 수있는 결과를 확인하는 것으로?
"엡실론의 어떤 가치가 당신이하고있는 일에 맞는지 알려주지 않습니다."이 문장을 더 강조하십시오. 정말 중요합니다. –