2016-02-16 116 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通常的规则是可以精确地表示小整数。当然,如果直接输入它们,某些计算的结果可能不准确。 –