91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

計算機中浮點數運算的問題

發布時間:2020-08-19 22:35:02 來源:網絡 閱讀:691 作者:菏澤小朱 欄目:編程語言

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

#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上的執行結果為:

sum = 10.000002

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

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

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

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

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

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

   然而并不是所有的十進制小數都能轉化為二進制小數,如十進制的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...是個無限循環的小數,所以當我們進行浮點數進行計算機運算的時候可能出現錯誤。

   常見的解決辦法是:

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

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




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

搜索| 广宁县| 延寿县| 汉中市| 云林县| 司法| 舟曲县| 和政县| 日喀则市| 温宿县| 淳化县| 商水县| 襄垣县| 托克逊县| 西平县| 海淀区| 乐陵市| 瑞昌市| 图木舒克市| 惠州市| 长治市| 瓮安县| 泾源县| 象山县| 兴宁市| 和田市| 阿勒泰市| 镶黄旗| 四子王旗| 洛阳市| 资兴市| 莲花县| 襄垣县| 高碑店市| 大关县| 镇坪县| 西城区| 健康| 云南省| 荥经县| 万年县|