除了fortran中的某些元素之外,如何为数组赋值?

时间:2015-11-13 14:53:43

标签: arrays fortran

我想为具有特定规则的数组赋值,但由于除零问题导致第5个元素除外。该计划如下:


    program main
        implicit none
      real(8) :: a(10)
      integer :: i

      a(5) = 0d0
      do i = 1, 10
         if (i /= 5) then
            a(i) = 1.0d0 / dble(i-5)
         end if
         write(*,*) a(i)
      end do

      stop
    end program main

是否有更智能/更有效的方法来做同样的事情? 非常感谢你!

1 个答案:

答案 0 :(得分:0)

如果您想保存源代码的数量:

program main
  implicit none
  integer, parameter :: dbl = kind(1.d0)
  real(dbl) :: a(10)
  integer :: i

  do i = 1, 10
    a(i) = 1._dbl / (i-5)
  end do
  a(5) = 0

  ! I expect you want to do something more than just this with the array
  do i = 1, 10
    write(*,*) a(i)
  end do
end program

正如francescalus所指出的,如果启用了浮点异常,这可能会导致程序崩溃。无论如何,还要注意我使用的其他东西,这可以缩短你的代码。 = 0代替= 0.d0,避免dbl()(必要时使用real(x,dbl))等等。

如果经常重复此代码,您还可以通过避免分支来节省一些CPU时间。在典型的初始化代码中,它是无关紧要的。