가우스 제거기를 C로 만들려고합니다. 때때로, 행렬이 수치 적으로 단수인지 여부를 확인해야합니다. 특정 숫자 (double)가 매우 매우 작은 경우입니다.권장 이중 엡실론은 무엇입니까?
내 문제는이 일을 내가하려고하면 있다는 것입니다 :
if(0 == matrix->items[from]){
fprintf(stderr,"Matrix is still singular after attempting pivot. Exitig.\n");
}
이 사실 양보하지 않습니다. double의 부정확성 때문에 정확히 0이 될 수 없습니다. 그러나 프로그램을 실행하려고하면이 경우와 같이 곱하거나 나누는 지 여부에 따라 inf 또는 NaN으로 숫자를 채 웁니다.
#define EPSILON very_small
// rest of the code
if(matrix->items[from] < EPSILON){
...singular
}
이 EPSILON에 대한 권장 값 무엇입니까 :이를 필터링하기 위해
, 나는 이런 식으로 뭔가를해야 할 것인가? 그것은 절대 정확도가 double인지, 아니면 좀 더 큰 값입니까? 위와 같이 매크로로 정의하거나 좋아하여, 더 나은 될 것입니다 방법으로
는 : 나는 충분히 명확되고 있지 않다 경우const double EPSILON = ...;
죄송합니다, 영어는 내 모국어가 아닌.
답장을 보내 주셔서 감사합니다.
는'기록하지 마십시오. 그리고 현대 컴파일러는 우연히 비교 대신 할당을 사용하면 불평 할 것이므로 더 이상 "좋은 *"방법은 아닙니다. –
올바른 값은 'DBL_EPSILON'뿐입니다. – Olaf
@Olaf 왜 유일한 올바른 값이다? – immibis