2014-03-13 51 views
0

我有一個簡單的if條件語句,它比較兩個實數(一個是從已導入模塊中分配並初始化的數組中讀取的),如果它不應該失敗,那麼這個條件語句就會被比較。fortran條件語句如何處理浮點數據類型?

在什麼情況下會發生這種情況?

我正在使用英特爾編譯器。

編輯: 爲了進一步澄清,我正在做這樣的事情:

if (12.2272 >= -5.0000) then 
    do something 
else 
    print *, 'fail' 
endif 

我越來越fail。當我僅用>而不是>=進行評估時也是如此。

+2

通常對於一個比較失敗它當理由不應該是程序員不能完全理解正在發生的事情。如果不看你的代碼,我不會冒任何其他猜測。 –

+0

http://stackoverflow.com/questions/20764911/fortran-77-float-point-numbers-equality/ –

+0

是的,我不明白,這是我提出問題的理由。我添加了一些僞代碼來描述我的問題。謝謝您的幫助! – ryanjdillon

回答

1

通常,由於浮點數的內在不精確性,您可以僅將浮點數與可接受的範圍進行可靠比較。一般來說,除了一些特殊情況,比如直接讀取值與一些小整數(通常爲0),您不應該比較平等。

如果您使用其中一個數字進行了非平凡計算,根本沒有比較的平等。有了一定的寬容度,您可以使用:

if (abs(a-b)<eps) ... 

其中eps是一些小數字。它可能是內部函數結果的一些(甚至很大)倍數。

這是很好的瞭解浮點一些文章,比如http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

你可以試試這個小程序來看看典型的問題與浮點數

real x 
integer i 

x = 0 
do i = 1,10 
    x = x + 0.1 
end do 

print *, x, x==1 

end