opencv的四舍五入原来是这样来的
来源:互联网 发布:淘宝女装店铺推荐 编辑:程序博客网 时间:2024/06/05 23:02
/* from opencv-1.0.0/cxcore/include */CV_INLINE int cvRound( double value ){#if CV_SSE2 __m128d t = _mm_load_sd( &value ); return _mm_cvtsd_si32(t);#elif defined WIN32 && !defined WIN64 && defined _MSC_VER int t; __asm { fld value; fistp t; } return t;#elif (defined HAVE_LRINT) || (defined WIN64 && !defined EM64T && defined CV_ICC) return (int)lrint(value);#else /* the algorithm was taken from Agner Fog's optimization guide at http://www.agner.org/assem */ Cv64suf temp; temp.f = value + 6755399441055744.0; return (int)temp.u;#endif}
test:
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <emmintrin.h> //SSE2(include xmmintrin.h) int main(){ double a; srand((unsigned)time(NULL)); a=rand()/(double)(RAND_MAX); a=1000000.0*a; printf("%lf\n",a); __m128d t = _mm_load_sd( &a ); int b = _mm_cvtsd_si32(t); printf("b=%d\n",b); typedef union Cv64suf { long long i; unsigned long long u; double f; } Cv64suf; Cv64suf temp; temp.f = a + 6755399441055744.0; int c = (int)temp.u; printf("c=%d\n",c); return 0;}
compile:gcc -Wall -march=pentium4 -mmmx -o round round.c
out:
root@ubuntu:/home/luoxiao/work# ./round 686349.396448b=686349c=686349root@ubuntu:/home/luoxiao/work# ./round 406454.875789b=406455c=406455root@ubuntu:/home/luoxiao/work# ./round 406454.875789b=406455c=406455root@ubuntu:/home/luoxiao/work# ./round 763588.931301b=763589c=763589
0 0
- opencv的四舍五入原来是这样来的
- 日本人,原来是这样来的
- 气质原来是这样来的
- 原来是这样的
- 原来是这样的
- 原来九寨沟这名称是这样来的.
- 开心网 原来是这样来发展会员的
- 原来小清新色调是这样调出来的~
- 伤心原来是这样的!!!!!!
- 原来AJAX是这样的
- 原来新手是这样的
- TTTTTTTTTTDDDDDDDD原来是这样。。。。。。。。。。的
- 回文原来是这样的
- IT原来是这样的
- 世界原来是这样的
- 原来cvMinMaxLoc的roi是这样的
- 原来Smart Client 是这样的
- 网页病毒原来是这样产生的
- Android布局
- 泛型边界和通配符
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)|分块|莫队算法
- Intent Filter用法
- CoreData
- opencv的四舍五入原来是这样来的
- Google C++编程风格指南(一)之头文件的相关规范
- Python闭包
- POJ 3348 Cows (凸包+多边形面积)
- ios中将单个字典转换成json格式以及json格式的转换成字典解析
- NopCommerce添加新功能“类型属性”【新功能的实现步骤】
- 嵌入式开发环境搭建随记
- 地图(系统)
- Android应用方法隐藏及反调试技术浅析