高精度除法

高精度与单精度除法

  在高精度除以单精度时,从高位到低位逐位相除。最需要注意的问题是,后一位继承前一位的余数问题。

  设高精度的数位数字为a[i],单精度数为b,第i+1位除b后的余数位r,把r加到i位时,应乘以进制X,即s=Xxr+a[i].

void divide(BIGFLOAT a,int b,BIGFLOAT* c)
{
    int s,i,r=0;
    c->sign=a.sign;                               //这里规定b为正数
   for(i=a.ni-1;i>=0;i--)                       //计算整数除以b
    {
         s=10*r+a.a[i];                            //本位数字加上余数
      c->a[i]=s/b;                              //计算本位数字
      s=s%b;                                      //计算余数
    }
    for(i=a.nd-1;i>=0;i--)                      //计算小数除以b
    { 
         s=10*r+a.d[i];                            //计算本位数字
        c->d[i]=s/b;                                //计算本位数字
         r=s%b;                                      //计算余数
     }
}

  高精度与高精度除法

  对于两个高精度的除法直接计算,一般可用被除数减去除数的高精度来实现,在程序中设置一个计数器C,用高精度加法来累加减了多少次即为最后的商。当被除数小于减数时,此时被减数即为余数。

高精度除法快速计算、高精度乘方和开方

请参考张正秋 编著《数值计算与数据处理编程及实践》 ——高精度计算程序设计

posted on 2012-03-08 16:04  Daywei  阅读(1801)  评论(0编辑  收藏  举报

导航

技术追求卓越 梦想创造未来