易码技术论坛

 找回密码
 加入易码
搜索
查看: 154273|回复: 5

LAVA如何求根号

[复制链接]
发表于 2005-2-17 16:34:00 | 显示全部楼层
在lava2中可用:
Math.sqrt()函数。
发表于 2005-2-17 16:37:00 | 显示全部楼层
可以通过高精度计算的方法来完成。
解题思路是,模拟手工开放的方法来做。
发表于 2005-2-17 18:56:00 | 显示全部楼层
可以通过迭代的方法来做
这就是数学
发表于 2005-2-18 17:23:00 | 显示全部楼层
以前在天空城发过的一张帖子,作者不记得了。可以计算开平方。
int sqrt(long M)
{
    int N, i;
    long tmp, ttp;   // 结果、循环计数
    if(M==0)               // 被开方数,开方结果也为0
        return 0;
    N=0;
    tmp =(M>>30);          // 获取最高位:B[m-1]
    M=M<<2;
    if(tmp > 1)              // 最高位为1
    {
       N++;                // 结果当前位为1,否则为默认的0
        tmp=tmp-N;
    }
    for(i=15;i>0;i--)      // 求剩余的15位
    {
       N=N<<1;             // 左移一位
        tmp=tmp<<2;
        tmp=tmp+(-(M<0))*2+((M&0x7fffffff)>>30);     // 假设
        ttp=N;
        ttp=(ttp<<1)+1;
        M=M<<2;
        if(tmp>=ttp)       // 假设成立
        {
            tmp=tmp-ttp;
            N++;
        }
     }
    return N;
}

void main()
{
  int t;
  t=sqrt(50000000);
  printf("50000000^1/2=%d",t);
  getchar();
}
发表于 2005-3-12 17:12:00 | 显示全部楼层
不是可以用什么麦克劳林公式算?
估计那个库里边的sqrt就是这样的
 楼主| 发表于 2005-2-17 16:32:40 | 显示全部楼层 |阅读模式
LAVA如何求根号!!xiexie

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-5-5 07:44 , Processed in 0.010307 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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