[转载]Fortran 77, C, C++ 和 Fortran 90 的比较

这篇博客对比了Fortran 77、C、C++和Fortran 90在科学计算领域的适应性,包括数值健壮性、数据并行性、数据抽象、面向对象编程和函数型编程。Fortran 90因其数值健壮性和数据并行性优势排名首位,而C++在面向对象编程方面领先。文章还给出了代码示例,展示高斯消元法在Fortran 77和C中的实现。
摘要由CSDN通过智能技术生成
发信人: quasar (飞贼克斯), 信区: Fortran
标  题: Fortran 77, C, C++ 和 Fortran 90 的比较(转载)
发信站: 南京大学小百合站 (Tue Jun  1 10:59:14 2004)


瀚海星云 -- 文章阅读 [讨论区: MathTools]

发信人: HuiCai (老灰菜), 信区: SciComp
标  题: Fortran 77, C, C++ 和 Fortran 90 的比较(转载)
发信站: 瀚海星云 (2002年12月19日10:40:38 星期四), 站内信件

【 以下文字转载自 Fortran 讨论区 】
【 原文由 HuiCai 所发表 】

Fortran 77, C, C++ 和 Fortran 90 的比较
http://www.csdn.net/develop/article/16/16085.shtm

三十年来, 从 Fortran 77 开始, Fortran 成为了计算科学的主要语言.在这段时间里, Fortran 的数值能力变得非常稳定 而且优于其它计算机语言; 最大的改变来自于不断增长的各种可靠的数值过程库的种类. Fortran 联合(union), 它的使用技巧, 扩充的数值库为计算科学赋予了良好的基础.

可是在过去十几年中, 动态数据结构(特别是动态数组)的重要性不窜上升, UNIX 工作站, 复杂的交互式可视化工具, 以及更近的并行体系结构--Fortran 77 都没有实现--刺激了其它语言作为计算语言的使用, 最明显的一个例子是C. 最近C++ 也已经引起人们的兴趣, Fortran 通过发展到 Fortran 90来弥补它在现代科学计算方面的不足. 这部分的一个通常的工作是比较四种语言对科学计算的适应性的, 这四种语言是两个C 的代表(C, C++) 和两个Fortran的代表(Fortran 77, Fortran 90). 下面的表格总结了这种比较, 后面的内容试图合理地解释这种等级排序, 从最好(1)到最差(4)..

功能 ------------ F77 - C - C++ - F90
数值健壮性 ---- 2 ---- 4 --- 3 ----- 1
数据并行性 ---- 3 ---- 3 --- 3 ----- 1
数据抽象 ------- 4 ---- 3 --- 2 ----- 1
面向对象编程 - 4 ---- 3 --- 1 ----- 2
函数型编程 ---- 4 ---- 3 --- 2 ----- 1
平均等级 ------ 3.4 - 3.2 - 2.2 -- 1.2

1 数值健壮性

 Numeric Polymorphism(数值多态性)中是一个给定一个通用名称的几种版本的图形平滑过程的例子. 这里描述的通用能力是作为Fortran 90提供的一种额外的数值健壮性超过Fortran 77和C的特性. Fortran 77, Fortran 90 , 和 C 版本的SMOOTH子过程也在下面给出, 用于比较. (注意, Fortran 90版使用了第4部分描述的并行性)

数值多态性, 加上实际类型的参数, 小数精度选择, 和数字环境变量检查等, 证明了Fortran 90排在这四种语言中的第一位. Fortran 77 列在第二为的原因在于它支持复杂变量, 这在很多计算科学应用中是很重要的. C++ 把 C 挤出了第三位是由于它在通常领域多态性上的能力.


2 数据并行化部分

在这四种语言中, 只有Fortran 90具有对科学计算有价值的数据并行能力; 其它三种语言在这方面的特性基本上是一样的, 即全都没有. 这解释了四种语言在这个方面的排名.

这里是完成高斯消去的一套Fortran 77 和 C 过程:

*****************************************************************
* 编程决定正确的子过程处理过程: pivot.f , triang.f , 和 back.f. *
* 子过程决定一系列同步方程的解                 *
*****************************************************************
*234567

      PROGRAM testg
      INTEGER IMAX, JMAX
      PARAMETER (IMAX = 3, JMAX = 4)
      REAL matrix(IMAX, JMAX)
      REAL matrix(IMAX)
      INTEGER i, j, n

      DATA ( ( matrix(i,j), j = 1, JMAX), i = 1, IMAX)
      + /-1.0, 1.0, 2.0, 2.0, 3.0, -1.0, 1.0, 6.0,
      + -1.0, 3.0, 4.0, 4.0/

      n = IMAX

      write
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值