新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 關(guān)于浮點(diǎn)數(shù)的小數(shù)部分計(jì)算

        關(guān)于浮點(diǎn)數(shù)的小數(shù)部分計(jì)算

        作者: 時(shí)間:2016-08-02 來(lái)源:網(wǎng)絡(luò) 收藏

          收到QQ上一個(gè)留言,有位網(wǎng)友詢問(wèn)我一個(gè)簡(jiǎn)單的問(wèn)題。問(wèn)題如下:

        本文引用地址:http://www.104case.com/article/201608/294898.htm

          1111 011. 1 0001 1110 1011 1000=123.559998,小數(shù)點(diǎn)后是怎么計(jì)算的呢?謝謝您!

          很明顯1111 011. 1 0001 1110 1011 1000是一個(gè)二進(jìn)制數(shù)。整數(shù)部分當(dāng)然好計(jì)算,將每位的權(quán)值加起來(lái)即可。這位網(wǎng)友詢問(wèn)的是小數(shù)部分的計(jì)算方法。其實(shí)也非常簡(jiǎn)單。

          0.10001111010111000=2^(-1)+2^(-5)+2^(-6)+2^(-7)+2^(-8)+2^(-10)+2^(-12)+2^(-13)+2^(-14)=0.559998

          這個(gè)可以通過(guò)計(jì)算器來(lái)計(jì)算。但是小數(shù)后位數(shù)太多,容易出錯(cuò)。我們可以編寫一段簡(jiǎn)單的代碼來(lái)計(jì)算。代碼如下:

          #include

          #include

          char a[]="10001111010111000";

          void main( )

          {

          unsigned char i;

          double sum =0.0;

          printf("sum=");

          for( i =0 ; i< sizeof(a); i++)

          {

          if( a[i] =='1')

          {

          sum = sum + pow(2,-(i+1));

          printf("+2^(%d)",-(i+1));

          }

          }

          printf("n%fn", sum);

          }

          我這樣回答希望他明白!



        關(guān)鍵詞: 浮點(diǎn)數(shù)

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 布拖县| 庆元县| 丹寨县| 抚宁县| 定南县| 淮南市| 精河县| 崇州市| 云和县| 平塘县| 白水县| 贵德县| 乌拉特前旗| 上蔡县| 尼木县| 四川省| 淮滨县| 儋州市| 道孚县| 彰化市| 巩留县| 丽江市| 玛曲县| 儋州市| 鲁山县| 敖汉旗| 观塘区| 洪江市| 扬州市| 莫力| 娄底市| 乌拉特中旗| 罗田县| 武强县| 始兴县| 秀山| 右玉县| 响水县| 成武县| 远安县| 苗栗市|