Matlab的round函數和OpenCV的cvRound函數都是獲得浮點數最近的整數。
今天在調試項目時發現Matlab代碼運行結果和C++代碼運行結果略有出入,最后定位到Matlab的round函數和OpenCV的cvRound函數對於.5的處理略有區別:
以下為測試round函數的Matlab代碼:
d1 = 0.5; d2 = -0.5; d3 = 100.5; d4 = -100.5; n1 = round(d1); n2 = round(d2); n3 = round(d3); n4 = round(d4); fprintf(1, 'round(%.1f) = %d\n', d1, n1); fprintf(1, 'round(%.1f) = %d\n', d2, n2); fprintf(1, 'round(%.1f) = %d\n', d3, n3); fprintf(1, 'round(%.1f) = %d\n', d4, n4);
運行結果為:
以下為測試cvRound函數的C代碼:
double d1 = 0.5; double d2 = -0.5; double d3 = 100.5; double d4 = -100.5; int n1 = cvRound(d1); int n2 = cvRound(d2); int n3 = cvRound(d3); int n4 = cvRound(d4); printf("cvRound(%.1f) = %d\n", d1, n1); printf("cvRound(%.1f) = %d\n", d2, n2); printf("cvRound(%.1f) = %d\n", d3, n3); printf("cvRound(%.1f) = %d\n", d4, n4);
運行結果為:
Matlab的round函數將0.5向上入,OpenCV的cvRound函數將0.5向下舍。
根據“四舍五入”的規則,Matlab的round函數是不是更妥當呢?