Fortran Coder

楼主: andy8496
打印 上一主题 下一主题

[讨论] 一个数组运算的问题

[复制链接]

2

帖子

0

主题

0

精华

入门

F 币
37 元
贡献
21 点
楼主
发表于 2017-8-9 21:51:30 | 显示全部楼层
[Fortran] 纯文本查看 复制代码
program main
implicit none
   integer :: ia(5),ib(9)
   ia = [1,5,5,5,2]
   ib = 0
   ib(ia) = ib(ia) + [1,1,1,1,1]
   write(*,*) ib
   stop
end program

没特别仔细看,试着说两句:
我用CVF和ELF90试了一下,并不累加(我还是用老古董的编译器)。
感觉写法2的语法就不应该累加。因为从语法上看,看不出来右边的ib一定要用更新的值,或对ib(5)的三次操作要累加起来。
而写法1就非常明确,等号右边总是用更新的值,就有累加效果。

写法2的累加效果可能是编译器dependent,还是用写法1比较稳妥。

评分

参与人数 1F 币 +8 贡献 +8 收起 理由
fcode + 8 + 8 欢迎mltx老师

查看全部评分

2

帖子

0

主题

0

精华

入门

F 币
37 元
贡献
21 点
沙发
发表于 2017-8-10 19:46:25 | 显示全部楼层
找到了依据(by Michael Metcalf / CERN CN-AS):

Note that a vector subscript with duplicate values cannot appear on the left-hand side of an assignment as it would be ambiguous. Thus,

       b( (/ 1, 7, 3, 7 /) ) = (/ 1, 2, 3, 4 /)

is illegal.
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-6 15:35

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表