大家都說程式寫久、工程師幹久了,都會有自己的脾氣在...
下面這段 code 是某大學上課教材裡用到的一段 code。
int is_equ(double** m1, double** m2 size_t row, size_t col) { return !memcmp((void*)*m1, (void*)*m2, sizeof(double)*row*col); }
我指正了,給了我的 code。
int is_equ(double** m1, double** m2, double eps, size_t row, size_t col) { size_t i, j; for(i=0; i<row; ++i) for(j=0; j<col; ++j) if(fabs(m1[i][j]-m2[i][j])>eps) return 0; return 1; }
上面這段 code 被打槍了,原因是「速度太慢、多此一舉」。
速度太慢可以接受,因我不敢妄下定論,不會有其他讓我感到驚艷的程式碼出現;
但「多此一舉」就... ,eps 是可以拿 FLT_MIN 或 DBL_MIN 當預設,
不過對方意思是連用都不要用.. 直接比記憶體內容就好。
其他的,就是沉默了。
文章標籤
全站熱搜

被我變成負面教材了 http://novus.pixnet.net/blog/post/30654542 FLT_MIN、DBL_MIN 其實非常不適合當成誤差門檻。 FLT_EPSILON、DBL_EPSILON 只有在 [-1, 1] 以內合適,而且還得看需求的精度
不良示範應該只可以用在 int 吧!
嗯 是啊 novus 那篇寫的算不錯,該注意的都有提到了。