我在我的程序中有一个问题。用掩码调用的内部函数总和会导致可疑的结果:当我执行平均值时,我从数组边界中获得一个值。我怀疑这与舍入错误有关。我正在处理大数组,并且舍入误差会导致较大的偏差(与40,000个元素大小的预期值相比,差异约为40%)。问题与sum(array,mask = ...)
下面是重现它的最小示例以及相关的输出。
program main
implicit none
integer :: nelem
real, allocatable, dimension(:) :: real_array
logical, allocatable, dimension(:) :: log_array
! init
nelem=40000
allocate(real_array(nelem))
allocate(log_array(nelem))
real_array=0.
log_array=.true.
! Fill arrays
real_array=1./2000.
log_array = real_array.le.(0.5)
! Test
print *, ' test : ', &
count(log_array)+sum(real_array, mask=log_array), &
sum(1.+real_array,mask=log_array)
end program main
输出继电器是:
test : 40019.9961 40011.9961
理论成果是40020.
运行GNU的Fortran(GCC)4.9.0
可能重复[浮点数学是否被破坏?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –