real, dimension(3), parameter :: boxlen = [4.0, 5.0, 7.0]
real, parameter :: mindist = 0.1
integer ::i
write(*,"(A)") "Operation on array"
print*, floor(boxlen/mindist)
write(*,"(/A)") "Operation on individual elements"
do i=1,3
print*, i, floor(boxlen(i)/mindist)
enddo
这是我运行此代码时得到的结果。
Operation on array
40 50 70
Operation on individual elements
1 39
2 49
3 69
有人可以解释为什么两个计算(一个使用数组操作而另一个使用单个元素的操作)给出不同的结果?我认为它们应该是一样的。
答案 0 :(得分:0)
对于我在x86_64-linux-gnu上的GFortran 4.8.2我得到了
Operation on array 40 50 70 Operation on individual elements 1 40 2 50 3 70
凝视我的水晶球,如果您使用32位x86,计算值存储到内存和打印的顺序可能会有所不同。
另外,用" -fdump-tree-original"查看生成的中间代码,似乎对于数组操作,分区是在编译时完成的,所以至少应该正确舍入谢谢到MPFR)。