<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)C語言快速精度除法方案

          單片機(jī)C語言快速精度除法方案

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          目前的51單片機(jī)在進(jìn)行帶小數(shù)點(diǎn)結(jié)果的除法一般可以采用浮點(diǎn)數(shù)計(jì)算的方式,但是浮點(diǎn)數(shù)計(jì)算有一個缺點(diǎn)就是非常耗時,在對時間要求嚴(yán)格的工況就不太適用。
          筆者的工作室長期承接單片機(jī)、電路、機(jī)電液、工控、自動化、計(jì)算機(jī)軟件等項(xiàng)目,最近做了個單片機(jī)計(jì)算器的設(shè)計(jì),在設(shè)計(jì)除法時利用長整形除法和取余運(yùn)算,可以得到若干小數(shù)位的精度運(yùn)算,與大家共享。
          設(shè)計(jì)思路如下:
          假設(shè)長整形除數(shù)a, 長整形被數(shù)b,步驟如下:
          <1>得到除法的整數(shù)部分,c=a/b;
          <2>設(shè)d為a%b,e=10*d,
          得到除法的第一位小數(shù),f=e/b;
          (要點(diǎn):將a余b的余數(shù)乘以10倍,再和被除數(shù)b相除,就得到小數(shù)點(diǎn)后一位小數(shù))
          <3>設(shè)g為e%b,h=10*g,
          得到除法的第二位小數(shù),i=h/b;
          以此類推,可以得到除法的任意小數(shù)……
          /**********************************下面附上C語言程序
          **********************************************************/
          unsigned long result, result_p;//表示除法結(jié)果的整數(shù)和小數(shù)部分
          // result_p是小數(shù)部分,例如result_p=12345678,表示0.12345678
          Void chufa(unsigned long chushu, unsigned long beichushu, unsigned char wei)
          // wei表示精確到小數(shù)點(diǎn)后多少位
          { unsigned char i;
          unsigned long tmp;
          result=result_p=0;
          if (beichushu!=0)//被除數(shù)必須不為0
          {
          if (wei==0)
          {result=chushu/beichushu;//計(jì)算整數(shù)部分
          result_p=0;
          }
          else
          {result=chushu/beichushu;//計(jì)算整數(shù)部分
          tmp=chushu%beichushu;
          for (i=1;i<=wei;i++)//計(jì)算小數(shù)部分
          {tmp=tmp*10;
          result_p=result_p*10+tmp/beichushu;
          tmp=tmp%beichushu;
          }
          }
          }


          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();