新聞中心

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

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

        作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
        目前的51單片機(jī)在進(jìn)行帶小數(shù)點(diǎn)結(jié)果的除法一般可以采用浮點(diǎn)數(shù)計(jì)算的方式,但是浮點(diǎn)數(shù)計(jì)算有一個(gè)缺點(diǎn)就是非常耗時(shí),在對(duì)時(shí)間要求嚴(yán)格的工況就不太適用。
        筆者的工作室長(zhǎng)期承接單片機(jī)、電路、機(jī)電液、工控、自動(dòng)化、計(jì)算機(jī)軟件等項(xiàng)目,最近做了個(gè)單片機(jī)計(jì)算器的設(shè)計(jì),在設(shè)計(jì)除法時(shí)利用長(zhǎng)整形除法和取余運(yùn)算,可以得到若干小數(shù)位的精度運(yùn)算,與大家共享。
        設(shè)計(jì)思路如下:
        假設(shè)長(zhǎng)整形除數(shù)a, 長(zhǎng)整形被數(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語(yǔ)言程序
        **********************************************************/
        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;
        }
        }
        }


        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 大新县| 安仁县| 鲁山县| 揭阳市| 武城县| 安岳县| 吕梁市| 汝南县| 石阡县| 郴州市| 盐亭县| 玉林市| 东莞市| 滨海县| 大洼县| 张家川| 波密县| 大渡口区| 建始县| 奈曼旗| 达尔| 邵阳县| 迁安市| 晋宁县| 黄山市| 扎囊县| 东乌珠穆沁旗| 新和县| 吉水县| 永胜县| 长治市| 扬州市| 高要市| 黑水县| 佛教| 河东区| 文化| 鲜城| 镇原县| 新平| 尉犁县|