2010-09-24 38 views
1

我有一個輸入文件,第一行包含以下小數。從文件讀取的值在Fortran中存儲爲不同的值

0.5053102074297753 

我有一個Fortran 90程序讀取文件並輸出值。

read(*,*) answer 
write(*,"(F20.16)") answer 

這是輸出:

0.5053101778030396 

顯然,其存儲的是不一樣的東西被讀取。問題是,爲什麼?

回答

2

如何聲明答案?如果它是單精度實數,則只能預期大約6位精度的十進制數字。

此外,值被轉換爲二進制的內部存儲和計算。這可能會導致四捨五入和其他問題,但這裏的差別太大了,因爲這是原因。

要聲明的答案,雙精度,使用以下命令:

integer, parameter :: DRK = selected_real_kind (14) 
real (kind=DRK) :: answer 

這將保證答案至少有14張十進制數。 「DRK」可以在整個程序中使用。根據你的編譯器,你可以嘗試要求更多的數字......它可以提供這樣一種類型。很少有超過雙倍精度的必要。

+0

就是這樣!我完全忘了精度。答案被定義爲真實(kind = 4)。非常感謝。 – blahbaa 2010-09-24 16:25:58