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函数是不是更妥当呢?
请发表评论