왜 사용하여 2 개의 보충 비교하는 두 개의 복식을 비교하는 대신 그들의 차이점에 대해 엡실론 가치입니까?

StackOverflow https://stackoverflow.com/questions/96233

  •  01-07-2019
  •  | 
  •  

문제

참조 ...왜 내가 사용하는 두 개의 보충 통해 엡실론 방법은?인 엡실론 방법은 충분히 좋은 것은 대부분의 경우에.


업데이트: 저는 순수하게 보고에 대한 이론적 이유는 당신이 사용합니다.난 항상 사용되는 엡실론 방법입니다.

누군가 사용되는 2 개의 보충 성공적으로 비교?왜?왜?

도움이 되었습니까?

해결책

두 번째는 링크를 참조하는 언급하는 기사를 아주 오래 문제에 대한 설명:

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

그러나 하지 않으면 조정 성능을 나는 것으로 스틱 엡실론 그래서 사람들 수 있는 코드를 디버깅

다른 팁

비트 방법은 빠를 수 있습니다.내가 말할 수 있기 때문에 현대적인(멀티코어,높은 파이프라인)프로세서 그것은 종종 불가 무엇을 생각은 정말 빠릅니다.코드를 간단히 올바른 구현,다음 측정값 다음 optomise.

즉,비교할 때는 두 개의 수레와 함께 그 기원을 알 수 없을 따기,엡실론 유효한다는 것은 거의 불가능하다.

예를 들어:

무엇이 좋은 엡실론 비교할 때 거리에서 마일리 사이의 애틀랜타 GA,Dallas TX 고 어떤 장소에서 오하이오?

무엇이 좋은 엡실론 비교할 때 거리에서 마일리 사이에 왼쪽 발에,나의 오른쪽 발의 컴퓨터에서 내 데스크?

편집:

Ok,나는 공정한 번호의 사람들이 이해하지 왜 당신은 않을 것이 무엇인지 알 엡실론입니다.

옛날에 다시의 지식,내가 쓴 두는 프로그램과 함께 일 need for speed(에 의해 만들어진 게임 BioWare).하나의 프로그램했 바이너리 모델로 변환하 ASCII.다른 프로그램했 ASCII 모델하고 컴파일로 바꾼다.하나의 테스트를 썼었을의 매력적인 캐릭터들이 바이너리 모델,디컴파일,그들을 ASCII 한 다음 다시 이상이 필요합니다.그때 나는 내가 내 이진 버전으로 원래에서 하나 BioWare.문제 중 하나는 동안 비교했을 다루는 일부의 약간의 차이에서 부동 소수점의 값이다.그래서 그 대신에 오르는 무리의 다른 EPSILONS 의 각 유형을 위해 floating point number(꼭지점,일반,등등),사용하고 싶었가 이와 같은 조로 칭찬은 비교합니다.따라서 피 전체 엡실론 여러 문제입니다.

동일한 유형의 문제에 적용할 수 있는 모든 유형의 소프트웨어를 처리하는 제 3 자 데이터와 다음에 대한 유효성 검사가 필요합니 그들의 결과는 원래이다.이러한 경우에도 모르는 무엇 부동 소수점의 값을 나타내,당신은 단지 그들을 비교합니다.우리가 달렸으로 이 문제는 우리 산업 자동화 소프트웨어입니다.

편집:

LOL,이 선정되었습니다 아래 다른 사람에 의해.

I'll 끓는 문제로 이어 두 임의 부동 소수점 숫자,당신은 어떻게 결정 엡실론을 사용합니까?당신은 할 수 없습니다.

할 수 있는 방법을 비교 1e23 1.0001e23 는 엡실론이고 여전히 비교 1e-23 5.2e-23 를 사용하여 동일한 엡실론?확실히,당신이 할 수있는 역동적인 엡실론 트릭만,전체적인 포인트를 정수 비교(을 필요로하지 않는 정수를 정확하).

정수 비교할 수 있을 비교하는 두 개의 수레를 사용하는 엡실론 상대적 크기의 숫자입니다.

편집

스티브,볼 수 있습니다 무엇을 말씀하신 의견:

"하지만 당신은 무엇을 알고 평등을 의미하는 당신은...따라서,당신은 당신을 찾을 수 있어야 적절한 엡실론".

이 문을 말한다:

"당신이 무엇을 알고 평등을 의미하는 당신,당신을 찾을 수 있어야 적절한 엡실론."

전체 포인트를 내가 말하려는 응용 프로그램이 있는 것이 무엇인지 우리는 알지 못한 평등을 의미에서의 절대적인 감각,그러므로 우리가 리조트에는 상대적인 비교는 어떤 정수 버전이고자 노력하고 있습니다.

올 때 그 속도,이 규칙을 따르:

  1. 하지 않은 경우 매우 경험이 풍부한 개발자,지 않는 최적화 할 수 있습니다.
  2. 는 경우에 당신은 경험이 풍부한 개발자,최적화하지 않 yet.

지는 가장 쉬운 방법입니다.

알렉스

그리고 맞습니다.지 않는 나사 이하지 않는 한 당신은 정말,정말 필요로 하는 성능이다.

그리고 당신은 하지 않습니다.는 경우 상황에서는,당신은 없을 것에 필요한 질문을--너는 이미 알고 있습니다.당신은 당신이 생각하는 경우에,당신은하지 않습니다.성능 문제는 다른 곳에 속인다.그냥 사용하여 읽을 수 있는 버전입니다.

모든 방법을 사용하는 비트 or 연산이 비교 결과는 것입니다 문제를 분수로 표시되는 정확하지 않을 수 있습니다.모든 부동 소수점 숫자를 가진 분수하지 않은 표시에서 두 개의 힘(1/2, 1/4, 1/8, 1/65536, &c)에 있는 근사치입니다.그래서 물론,모든 불합리한다.

float 세 번째=1/3;float 두=2.0;float another_two=타*6.0;는 경우(두!= another_two) print("근사! ");

만 시간을 비교하는 비트 단위로 작동 할 때 당신은 파생하는 부동 소수점 번호를 정확히 동일한 방식이나 그들은 정확한 표현(수,일부 힘의 두).그럼에도 있을 수 있습에 여러 표현의 일부 숫자,하지만 나는 본 적이 없이 작동 시스템입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top