| 查看: 2919 | 回复: 14 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
hfj1988新虫 (小有名气)
|
[求助]
fortran 程序有write和没有write两种情况计算的结果为什么会不一样?
|
||
|
fortran 程序在调试的时候我加了几个write(*,*)语句,发现计算的结果和不加不一样(在小数点后几位不一样),这是为什么? 在subroutine 中:intel 的fortran 编译器是否不检查数组大小?数组越界了也能算,但是就是计算错的,为什么?比如在某个子程序中:real(8) a(1000) 运行时候发现用到a(1200),却不报错。 |
» 猜你喜欢
售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急
已经有4人回复
上海工程技术大学 激光智能制造课题组 2027级博士研究生招生
已经有6人回复
课题组招2027级博士 上海工程技术大学 激光智能制造方向
已经有6人回复
现代”学阀”该如何界定
已经有14人回复
求合成方法
已经有8人回复
师弟论文见刊大半年才想起来申请专利,还能抢救一下吗?
已经有4人回复
有机合成以后会不会被AI改变?做科研的虫友怎么看
已经有8人回复
我的奶奶
已经有3人回复
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
hfj1988: 金币+15 2013-01-16 17:28:45
hfj1988: 金币+15 2013-01-16 17:28:45
|
可能Fortran77程序里没有加implicit none?在fortran 90里直接调用fortran 77没有任何问题,不需要格式转换。这也是fortran在科学计算界仍然占据主流的一个重要原因:对于40年前的老程序只要将其包装在一个subroutine或function里面就可以在最新格式的程序调用,重用性极强。 如果你编译fortran 77的时候发现有问题,如上面提到的数组越界等,可以通过指定编译器选项在编译时进行检查,ifort提供的选项是-check bounds. fortran 77最应该避免的一个语法是goto,它会导致你在看老程序的时候产生毁灭世界的冲动。 fortran 77转换到fortran 90的工具有一些,免费的如Alan Miller网页上提供的to_f90.f90,链接 http://jblevins.org/mirror/amiller/to_f90.f90 这个程序好像也不能完全转换goto。另外nag的windows版fortran也提供转换功能,但更有限。另外有个软件记不清名字了,它有免费和商业版两种,格式转换做得非常好,不过免费版的不提供转换goto语句的功能。 写程序时尽量避免fortran 77的语法,养成良好的编程风格,不但自己赏心悦目也方便了后面维护程序的人。 |
12楼2013-01-15 14:52:43
hfj1988
新虫 (小有名气)
- 应助: 4 (幼儿园)
- 金币: 1057.2
- 帖子: 185
- 在线: 115.2小时
- 虫号: 2138982
- 注册: 2012-11-21
- 专业: 计算数学与科学工程计算
2楼2013-01-11 20:02:10
wxdongmeng
新虫 (初入文坛)
- 应助: 1 (幼儿园)
- 金币: 114.5
- 帖子: 49
- 在线: 6.7小时
- 虫号: 229853
- 注册: 2006-03-25
- 性别: MM
- 专业: 计算数学与科学工程计算
3楼2013-01-11 20:31:29
hfj1988
新虫 (小有名气)
- 应助: 4 (幼儿园)
- 金币: 1057.2
- 帖子: 185
- 在线: 115.2小时
- 虫号: 2138982
- 注册: 2012-11-21
- 专业: 计算数学与科学工程计算
4楼2013-01-11 20:32:57










回复此楼