2016-02-16 134 views
3

在Fortran中,我總是可以依靠0.d0 == 0導致.true。 ? 即:Fortran:是0.d0總是== 0?

real(8) :: x 
integer :: i 

x = 0.d0 
i = 0 
write(*,*) x == i 

我試圖在一個簡單的代碼,它原來作爲.TRUE。但我能永遠相信這一點嗎? 原因是我想避免acos(x)如果x < -1的問題。

回答

3

i將被提升爲之前的浮點型應用關係相等性測試==

浮點數零將比較true本身,也與一個負符號零。

「我能永遠相信嗎?」是的你可以。

+0

謝謝,我認爲浮點數0是0(不是由0.000000000000000000000000000000000000001或類似的數字表示) –

+0

不,零可以完全用浮點數表示。此鏈接可能會對您有所幫助:https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Bathsheba

+0

@ErikThysell通常的規則是可以精確地表示小整數。當然,如果直接輸入它們,某些計算的結果可能不準確。 –