我想为具有特定规则的数组赋值,但由于除零问题导致第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
是否有更智能/更有效的方法来做同样的事情? 非常感谢你!
答案 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时间。在典型的初始化代码中,它是无关紧要的。