搜索
bottom↓
回复: 16

32位开方运算

[复制链接]

出0入0汤圆

发表于 2010-5-28 20:34:06 | 显示全部楼层 |阅读模式
哪位大侠有32开方的汇编代码,跪求!

我用C语言的开发代码,太慢了,不知道是NEC的运算速度不行还是我的代码不行。

unsigned int LONG_SQRT_INT2(unsigned long M)  
{  
    unsigned int N, i;  
    unsigned long tmp, ttp;   // 结果、循环计数  
    if (M == 0)               // 被开方数,开方结果也为0  
        return 0;  
    N = 0;  
    tmp = (M >> 30);          // 获取最高位:B[m-1]  
    M <<= 2;  
    if (tmp > 1)              // 最高位为1  
    {  
        N ++;                 // 结果当前位为1,否则为默认的0  
        tmp -= N;  
    }  
    for (i=15; i>0; i--)      // 求剩余的15位  
    {  
        N <<= 1;              // 左移一位  
        tmp <<= 2;  
        tmp += (M >> 30);     // 假设  
        ttp = N;  
        ttp = (ttp<<1)+1;  
        M <<= 2;  
        if (tmp >= ttp)       // 假设成立  
        {  
            tmp -= ttp;  
            N ++;  
        }  
    }  
    return N;  
}

网上找的,运算需要10个毫秒左右,晕死!

出0入0汤圆

发表于 2010-6-12 19:25:37 | 显示全部楼层
用在什么上的,为什么要开方运算?

出0入0汤圆

发表于 2010-6-12 19:35:46 | 显示全部楼层
这么简单的代码,可以直接手工翻译成汇编吧。

出0入0汤圆

发表于 2010-6-12 21:21:20 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-6-12 21:32:45 | 显示全部楼层
不是有个奇妙的数据,开方迭代三次就够精度的算法吗

出0入0汤圆

发表于 2010-6-13 00:36:58 | 显示全部楼层
回复【4楼】888888888888
不是有个奇妙的数据,开方迭代三次就够精度的算法吗
-----------------------------------------------------------------------

那个是对浮点数的……

出0入0汤圆

发表于 2010-6-29 15:43:20 | 显示全部楼层
试试这个看看
/*-----------------------------------------------------------------
功能:32位整形数求平方根(程序取自《高效程序的秘密Hacker's Delight》)
输入:待求数据x
输出:平方根
-------------------------------------------------------------------*/
unsigned int isqrt32(unsigned long x)
{
   unsigned long m,y,b;
   m = 0x40000000;
   y = 0;
   while(m != 0)
  {
    b = y | m;
    y = y >> 1;
    if(x >= b)
    {
       x = x - b;
       y = y | m;
    }
    m >>= 2;
   }
   return y;
}

出0入0汤圆

发表于 2010-6-29 18:44:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-29 19:32:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-29 20:14:24 | 显示全部楼层
6楼的算法很快。
                                                          
MARK 开方

出0入0汤圆

发表于 2010-6-29 21:10:04 | 显示全部楼层
http://supp.iar.com/FilesPublic/SUPPORT/000419/AN-G-002.pdf
unsigned int root(unsigned int x)
{
unsigned int a,b;
b = x;
a = x = 0x3f;
x = b/x;
a = x = (x+a)>>1;
x = b/x;
a = x = (x+a)>>1;
x = b/x;
x = (x+a)>>1;
return(x);
}
http://ww1.microchip.com/downloads/en/AppNotes/91040a.pdf
http://www.azillionmonkeys.com/qed/sqroot.html
/* by Mark Crowne */
        static unsigned int mcrowne_isqrt (unsigned long val) {
          unsigned int temp, g=0;

          if (val >= 0x40000000) {
            g = 0x8000;
            val -= 0x40000000;
          }

        #define INNER_ISQRT(s)                        \
          temp = (g << (s)) + (1 << ((s) * 2 - 2));   \
          if (val >= temp) {                          \
            g += 1 << ((s)-1);                        \
            val -= temp;                              \
          }

          INNER_ISQRT (15)
          INNER_ISQRT (14)
          INNER_ISQRT (13)
          INNER_ISQRT (12)
          INNER_ISQRT (11)
          INNER_ISQRT (10)
          INNER_ISQRT ( 9)
          INNER_ISQRT ( 8)
          INNER_ISQRT ( 7)
          INNER_ISQRT ( 6)
          INNER_ISQRT ( 5)
          INNER_ISQRT ( 4)
          INNER_ISQRT ( 3)
          INNER_ISQRT ( 2)

        #undef INNER_ISQRT

          temp = g+g+1;
          if (val >= temp) g++;
          return g;
        }

出0入0汤圆

发表于 2013-9-5 11:12:02 | 显示全部楼层
看《hacker's delight》这本书

出0入0汤圆

发表于 2013-9-13 14:31:20 | 显示全部楼层
mark ! 在计算GPS 距离时用到。

出0入0汤圆

发表于 2013-9-13 14:46:55 | 显示全部楼层
都是高手啊,7楼强悍

出0入0汤圆

发表于 2014-4-27 14:22:16 | 显示全部楼层
你自己编写试试吧

出0入0汤圆

发表于 2014-5-28 21:30:54 | 显示全部楼层
这个程序速度还可以,200多个指令周期,如果1us一条指令,大概200多uS;是不是你的频率较慢。

出0入8汤圆

发表于 2014-5-28 22:21:57 来自手机 | 显示全部楼层
楼主数学课睡觉还是泡妞了
级数展开,去掉高阶小项就行了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 08:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表