大家都說程式寫久、工程師幹久了,都會有自己的脾氣在...

 

下面這段 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 當預設,

不過對方意思是連用都不要用.. 直接比記憶體內容就好。

 

其他的,就是沉默了。

edisonx 發表在 痞客邦 PIXNET 留言(2) 人氣()


留言列表 (2)

發表留言
  • novus
  • 被我變成負面教材了
    http://novus.pixnet.net/blog/post/30654542

    FLT_MIN、DBL_MIN 其實非常不適合當成誤差門檻。

    FLT_EPSILON、DBL_EPSILON 只有在 [-1, 1] 以內合適,而且還得看需求的精度
  • damody
  • 不良示範應該只可以用在 int 吧!
  • 嗯 是啊 novus 那篇寫的算不錯,該注意的都有提到了。

    edisonx 於 2013/06/15 17:34 回覆

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼

【 X 關閉 】

【PIXNET 痞客邦】國外旅遊調查
您是我們挑選到的讀者!

填完問卷將有機會獲得心動好禮哦(注意:關閉此視窗將不再出現)

立即填寫取消