Fortran:0.d0是否总是==0?
在fortran中,我是否可以始终依靠0.d0==0来生成.true? 即: 我试过一段简单的代码,结果是。真的。但我能一直相信这个吗?Fortran:0.d0是否总是==0?,fortran,double,rounding,precision,Fortran,Double,Rounding,Precision,在fortran中,我是否可以始终依靠0.d0==0来生成.true? 即: 我试过一段简单的代码,结果是。真的。但我能一直相信这个吗? 这样做的原因是我想避免在x
这样做的原因是我想避免在x<-1时出现acos(x)问题。
I
将在应用关系等式测试之前提升为浮点类型
浮点零将与自身以及负符号零进行比较
“我可以一直相信这个吗?”是的,你可以。谢谢,我认为浮点0是0(不是用0.000000000000000000000000000000001或类似的数字表示)不,零可以用浮点精确表示。此链接可能会帮助您:@ErikThysell通常的规则是小整数可以精确表示。当然,如果直接输入它们,某些计算的结果可能不精确。对于IEEE754双精度浮点,“小”表示任何高达2的53次方的值。
real(8) :: x
integer :: i
x = 0.d0
i = 0
write(*,*) x == i