| 查看: 2447 | 回复: 14 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
hfj1988新虫 (小有名气)
|
[求助]
fortran 程序有write和没有write两种情况计算的结果为什么会不一样?
|
||
|
fortran 程序在调试的时候我加了几个write(*,*)语句,发现计算的结果和不加不一样(在小数点后几位不一样),这是为什么? 在subroutine 中:intel 的fortran 编译器是否不检查数组大小?数组越界了也能算,但是就是计算错的,为什么?比如在某个子程序中:real(8) a(1000) 运行时候发现用到a(1200),却不报错。 |
» 猜你喜欢
自荐读博
已经有9人回复
投稿Elsevier的杂志(返修),总是在选择OA和subscription界面被踢皮球
已经有8人回复
自然科学基金委宣布启动申请书“瘦身提质”行动
已经有4人回复
求个博导看看
已经有18人回复
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
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







回复此楼