打印

单片机程序看不懂

[复制链接]
2596|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
newkiwi|  楼主 | 2012-7-6 18:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
short sqrt_16( unsigned long M)   
{
    unsigned int N, i;
    unsigned long tmp, ttp;
    if( M == 0 )            
        return 0;
   
    N = 0;
   
    tmp = ( M >> 30 );        
    M <<= 2;
    if( tmp > 1 )            
    {
        N ++;               
        tmp -= N;
    }
   
    for( i=15; i>0; i-- )   
    {
        N <<= 1;           
        
        tmp <<= 2;
        tmp += (M >> 30);  
        
        ttp = N;
        ttp = (ttp<<1)+1;
        
        M <<= 2;
        if( tmp >= ttp )   
        {
            tmp -= ttp;
            N ++;
        }      
    }
   
    return N;
}

相关帖子

沙发
板砖横飞| | 2012-7-6 19:38 | 只看该作者
这个我到现在也没看懂,先用起来再说了,就像库函数一样,知道输入输出,能用就行了,有时也没有必要较真,想有的函数不公布源码呢,不是也照样用吗

使用特权

评论回复
板凳
zoomone| | 2012-7-6 21:58 | 只看该作者
同意楼上。貌似是一种库函数。。。

使用特权

评论回复
地板
aihe| | 2012-7-6 23:44 | 只看该作者
对于不懂的东西有两种方法处理他
1、查找相关资料,直到弄懂为止
2、无视它,绕过它

使用特权

评论回复
5
wskwxfss| | 2012-7-7 09:24 | 只看该作者
用二进制短除求平方根

使用特权

评论回复
6
willy_see| | 2012-7-7 16:15 | 只看该作者
看看

使用特权

评论回复
7
我就是我lxw| | 2012-7-7 19:01 | 只看该作者
会用不就行了。

使用特权

评论回复
8
megderrr| | 2012-7-7 21:29 | 只看该作者
直接用就OJ了

使用特权

评论回复
9
shell.albert| | 2012-7-7 22:13 | 只看该作者
注释!注释!!注释!!!

使用特权

评论回复
10
fjzzclc| | 2012-7-14 15:21 | 只看该作者
看不懂

使用特权

评论回复
11
liang7143| | 2012-7-14 15:52 | 只看该作者
本帖最后由 liang7143 于 2012-7-14 15:55 编辑

呵呵,给LZ看一看一个更晕的函数
求平方根的倒数,等同于1/sqrt(x)



float InvSqrt(float x)
{
    float xhalf = 0.5f*x;
    int i = *(int*)&x; // get bits for floating value
    i = 0x5f3759df - (i>>1); // gives initial guess
    x = *(float*)&i; // convert bits back to float
    x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
    return x;
}


详细资料可以看附件

InvSqrt.pdf

147.71 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:No road of flower leads to glory.

0

主题

52

帖子

0

粉丝