單片機C語言快速精度除法方案
筆者的工作室長期承接單片機、電路、機電液、工控、自動化、計算機軟件等項目,最近做了個單片機計算器的設計,在設計除法時利用長整形除法和取余運算,可以得到若干小數(shù)位的精度運算,與大家共享。
設計思路如下:
假設長整形除數(shù)a, 長整形被數(shù)b,步驟如下:
<1>得到除法的整數(shù)部分,c=a/b;
<2>設d為a%b,e=10*d,
得到除法的第一位小數(shù),f=e/b;
(要點:將a余b的余數(shù)乘以10倍,再和被除數(shù)b相除,就得到小數(shù)點后一位小數(shù))
<3>設g為e%b,h=10*g,
得到除法的第二位小數(shù),i=h/b;
以此類推,可以得到除法的任意小數(shù)……
/**********************************下面附上C語言程序
**********************************************************/
unsigned long result, result_p;//表示除法結果的整數(shù)和小數(shù)部分
// result_p是小數(shù)部分,例如result_p=12345678,表示0.12345678
Void chufa(unsigned long chushu, unsigned long beichushu, unsigned char wei)
// wei表示精確到小數(shù)點后多少位
{ unsigned char i;
unsigned long tmp;
result=result_p=0;
if (beichushu!=0)//被除數(shù)必須不為0
{
if (wei==0)
{result=chushu/beichushu;//計算整數(shù)部分
result_p=0;
}
else
{result=chushu/beichushu;//計算整數(shù)部分
tmp=chushu%beichushu;
for (i=1;i<=wei;i++)//計算小數(shù)部分
{tmp=tmp*10;
result_p=result_p*10+tmp/beichushu;
tmp=tmp%beichushu;
}
}
}
評論