中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

計算機中浮點數(shù)運算的問題

    首先我們來看一下下面一段代碼:

為越城等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及越城網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站制作、成都網(wǎng)站設計、越城網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i;
    float sum = 0;
    
    for (i = 0; i < 100; i++){
        sum += 0.1;
    } 
    
    printf("sum = %f \n", sum);
    
    return 0;
}

    在32位ubuntu16.10上的執(zhí)行結果為:

sum = 10.000002

    0.1累加100次,結果應該是10.這里卻多出了0.000002,為什么呢??這主要是與計算機中浮點數(shù)計算方式有關。

    大家知道計算機是只認識0和1的,也就是所有的運算數(shù)值要轉化位二進制后進行運算的,而浮點數(shù)轉換成二進制的小數(shù)上就會出現(xiàn)問題。首先介紹下十進制小數(shù)轉化成二進制小數(shù)的方法:

    將十進制的整數(shù)轉化為二進制時,使用的方法是連續(xù)除2,將余數(shù)從下向上讀,就可以得到二進制數(shù);相反將十進制的小數(shù)轉化為二進制小數(shù)時,將小數(shù)部分乘2,直到小數(shù)部分全為0,如將十進制0.125轉化為二進制為0.001:

    0   0.125 * 2 = 0.25  (取0.25的整數(shù)部分)

    0   0.25 *2  = 0.5   (取0.5的整數(shù)部分)  

     1   0.5 *2  = 1.0   (取1.0的整數(shù)部分)  

   然而并不是所有的十進制小數(shù)都能轉化為二進制小數(shù),如十進制的0.1:

    0   0.1 * 2 = 0.2

     0   0.2 * 2 = 0.4

    0   0.4 * 2 = 0.8

     1   0.8 * 2 = 1.6

    1   0.6 * 2 = 1.2

     0   0.2 * 2 = 0.4

    .

    .

    .

   可以看出將十進制的0.1轉化為二進制是0.0001100011...是個無限循環(huán)的小數(shù),所以當我們進行浮點數(shù)進行計算機運算的時候可能出現(xiàn)錯誤。

   常見的解決辦法是:

    1)對于一些精度要求不高的運算可以選擇忽略

    2)對于一些要求較高的科學運算,可以先將十進制的小數(shù)轉化為整數(shù)再進行運算,因為計算機對整數(shù)的運算的是準確的。

分享名稱:計算機中浮點數(shù)運算的問題
網(wǎng)頁網(wǎng)址:http://m.rwnh.cn/article22/jephcc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航、電子商務、網(wǎng)站設計、外貿建站、搜索引擎優(yōu)化、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司
桃园市| 义乌市| 丰城市| 大石桥市| 湛江市| 玛多县| 洮南市| 东辽县| 南涧| 合肥市| 瑞安市| 轮台县| 余庆县| 和田市| 镇雄县| 宽城| 永宁县| 奇台县| 弥渡县| 张家川| 汤阴县| 苏尼特右旗| 沙坪坝区| 娱乐| 新田县| 永福县| 天台县| 甘孜县| 大关县| 舞阳县| 景东| 保亭| 龙泉市| 防城港市| 务川| 岑溪市| 东方市| 博白县| 额敏县| 莱西市| 临洮县|