我試圖在C中創建一個Gauss Eliminator。爲此,我不時需要檢查一個矩陣是否在數值上是單數的:如果某個數(雙)非常非常小。什麼是推薦最小epsilon爲雙?
我的問題是,如果我嘗試這樣做:
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推薦值?這是雙倍的絕對準確度,還是更大的價值?
順便說一句,這將是更好的,它定義爲一個宏如上,或者用它喜歡:
const double EPSILON = ...;
很抱歉,如果我不是很清楚,英語不是我的母語。
感謝您的回覆。
請不要寫'if(0 == matrix-> items [from])',這真的很難看。如果你不小心使用賦值而不是比較,現代編譯器會投訴,所以這不再是「*好*」的做法。 –
只有一個正確的值:'DBL_EPSILON'。 – Olaf
@Olaf爲什麼只有這個唯一正確的值? – immibis