首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fortran编译器4与11

fortran编译器4与11
EN

Stack Overflow用户
提问于 2009-10-06 13:11:33
回答 3查看 510关注 0票数 2

我正在将一个应用程序从fortran旧版本(4.0)移植到新版本(11.0)。在移植过程中,我遇到了一些实数*4变量的问题:

代码语言:javascript
复制
real*4 a,b,c

a=0.9876875
b=0.6754345

c=a*b

旧编译器0.667118c的值,这是正确的值。但是使用新的编译器,我得到了输出(c变量)的一个小变化,比如0.667120。虽然这是一个很小的变化,但我在其他一些计算中使用了这些值。因此,总体产出有很大的不同。如何克服这个问题?

EN

回答 3

Stack Overflow用户

发布于 2009-10-06 14:24:26

我猜,您是要从Microsoft Fortran Powerstation 4升级到英特尔Visual Fortran 11.xx吗?

不管怎样,试试这个:

代码语言:javascript
复制
program test32

integer, parameter :: iwp = selected_real_kind(15,300)

real(iwp) :: a,b,c

a=0.9876875
b=0.6754345

c=a*b
write(*,'(3f12.8)')a,b,c

end program test32

这给出了:

代码语言:javascript
复制
0.98768753  0.67543453  0.66711826

我不会解释selected_real_kind,这并不是因为我不希望,而是因为帮助可能会做得更好。但是,如果这里有什么不清楚的地方,一定要问一问。

附注:real*4或任何类型的real的表示都依赖于处理器和编译器,这也是你得到不同结果的原因之一。

票数 2
EN

Stack Overflow用户

发布于 2009-10-06 17:06:16

此处讨论英特尔visual Fortran编译器版本11的变化:

http://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/68587/

结果是,旧版本的Fortran编译器会在执行操作之前隐式地将单精度值提升为双精度值。版本11中的默认行为是以单精度执行操作。有一些编译器选项(/arch:ia32)可以在新编译器中启用旧的行为。

票数 2
EN

Stack Overflow用户

发布于 2009-10-06 14:17:10

我假设你用的是英特尔。尝试在不优化的情况下编译..

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1525493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档