单片机快速开根号函数 |
您所在的位置:网站首页 › 比亚迪用特斯拉充电桩怎么拔掉充电枪 › 单片机快速开根号函数 |
这个是一个电机驱动里面抠出来的。 /*! \brief Square root routine.STM32-72M主频耗时2.5us * * sqrt routine 'grupe', from comp.sys.ibm.pc.programmer * Subject: Summary: SQRT(int) algorithm (with profiling) * From: [email protected] (Warwick Allison) * Date: Tue Oct 8 09:16:35 1991 * * \param x Value to find square root of. * \return Square root of x. */ unsigned long sqrt(unsigned long x) { register unsigned long xr; // result register register unsigned long q2; // scan-bit register register unsigned char f; // flag (one bit) xr = 0; // clear result q2 = 0x40000000L; // higest possible result bit do { if((xr + q2) >= 1; if(f){ xr += q2; // test flag } } while(q2 >>= 2); // shift twice if(xr < x){ return xr +1; // add for rounding } else{ return xr; } }
转载博主的,原文连接:https://blog.csdn.net/zmazon/article/details/8217866 float SquareRootFloat(float number) {//STM32-72M主频耗时8us long i; float x, y; const float f = 1.5F; x = number * 0.5F; y = number; i = * ( long * ) &y; i = 0x5f3759df - ( i >> 1 ); y = * ( float * ) &i; y = y * ( f - ( x * y * y ) ); y = y * ( f - ( x * y * y ) ); return number * y; }
这个是转一个博主的,误差有点大,但是很快。原文连接:https://blog.csdn.net/xh270984572/article/details/72189457 float sq(float f) { //快速开方,STM32-72M主频耗时1.3us int o =((( ( *( (int*)&f ) )^0x00800000 )>>1)&0xbfffffff)+0x20000000; if((o&0x00400000)>0) o-=0x00800000; return (*((float*)&o)); } |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |