这个问题似乎总是出现在我面前,所以我想知道一个比我现在做的更好的解决方案。 我想使用循环构建一个数组,其中迭代参数用于计算。问题是数组索引中的整数工作正常,但在计算中使用时会导致错误。也许这个问题的一个例子很有用。
DO ii = 1,N
ir = real(ii,kind=dp) ! Cast this to real
DO ji=1,N
jr = real(ji,kind=dp) ! Cast this to real.
IF (abs(sqrt((ir-1)**2 + (jr-1)**2)) < Lim) THEN
A(ii,ji) = 1;
ELSEIF (abs(sqrt((ir-1)**2 + (jr-N)**2)) < Lim) THEN
A(ii,ji) = 1;
ELSEIF (abs(sqrt((ir-N)**2 + (jr-1)**2)) < Lim) THEN
A(ii,ji) = 1;
ELSEIF (abs(sqrt((ir-N)**2 + (jr-N)**2)) < Lim) THEN
A(ii,ji) = 1;
END IF
END DO
END DO
有没有办法做到这一点,而不是每次都通过循环强制转换?我觉得这是一个瓶颈。
答案 0 :(得分:0)
我怀疑转换是一个瓶颈,但你可以尝试实际使用实数并在循环中递增:
ri = 1.0
do ii=1,n
rj = 1.0
do jj=1,n
..math...
rj = rj + 1.0
enddo
ri = ri + 1.0
enddo