高精度与单精度除法
在高精度除以单精度时,从高位到低位逐位相除。最需要注意的问题是,后一位继承前一位的余数问题。
设高精度的数位数字为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,用高精度加法来累加减了多少次即为最后的商。当被除数小于减数时,此时被减数即为余数。
高精度除法快速计算、高精度乘方和开方
请参考张正秋 编著《数值计算与数据处理编程及实践》 ——高精度计算程序设计