2011-10-20 72 views
3

我使用DEVC++ 4.9,在WinXP SP3(32位)上運行的,這裏是代碼:C中錯誤的雙重計算?

#include <stdio.h> 
#include <stdlib.h> 

main(int argc, char *argv[]) 
{ 
    double value; 

    int i; 

    printf("Enter double: "); 
    scanf("%lf", &value); 
    i = value*100; 
    printf("double: %lf\n", value); 
    printf("int: %d\n", i); 

    system("PAUSE"); 
} 

我已經進入不同的價值觀和這裏的結果:

測試1:

enter image description here

試驗2:

enter image description here

試驗3:

enter image description here

爲什麼測試1和測試2顯示不同的結果?

+1

我懷疑這只是一個特性,如何存儲一個浮點數,以及它如何近似爲一個整數。 –

回答

6

這是由於浮點四捨五入:

什麼每臺計算機科學家應該知道關於浮點運算: http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html

3.07不能以二進制精確表示。在你的情況下,它被四捨五入到略低於3.07,因此100 * 3.07正在評估對306.9999999...,其被截斷爲306

同樣適用於3.05。但是3.06,略有增加。所以100 * 3.06正確顯示爲306.

+0

很好的解釋和鏈接。謝謝。 – Alphaneo