返回介绍

1.4.3 算术表达式

发布于 2025-03-08 16:28:29 字数 3160 浏览 0 评论 0 收藏 0

a) 算术运算符和运算优先级

FORTRAN 规定可以使用五种算术运算符号。它们是:

+ 表示“加”(或正号)

- 表示“减”(或负号)

* 表示“乘”

/ 表示“除”

** 表示“乘方”

请注意:乘号用“*”表示,不能写成“×”,以免与字母“X”混淆,也不能用“.”代替乘号。除号不能用“÷”号。两个运算符不能紧邻,如 A*-B 是不合法的,应写成 A*(-B)。

不同的运算符按以下优先级次序:加,减 < 乘,除 < 乘方,括号( )中优先。同一优先级的两个运算,乘方按“先右后左”,其它按“先左后右”原则。

例:    x + y*z  →  x + (y*z)
x*y**2   →  x*(y**2)
x/y/z    →  (x/y)/z
x**y**z  →  x**(y**z)
3+5-6.0*8.0/4**2  →  3+5-48.0/16.0 = 5
例:    4b 分之 a  →  a/(4*b) 或 a/4/b,而 a/4*b 和 a/4b 是错误的。

如无自信时可用括号( ),对运算时间几乎无影响。

b) 算术表达式的含义和表示方法

所谓表达式是指一个或多个运算的组合。它是由 Fortran 的运算符和括号将各运算元素(包括常量、变量、函数、数组元素) 连结起来的一个有值的式子。Fortran77 允许使用四种表达式,即:算术表达式,关系表达式,逻辑表达式,字符表达式。

算术表达式中各运算元素都是算术量,使用的运算符只能是算术运算符,表达式的值也是一个算术量(即数值)。例如,下面就是一个 Fortran 算术表达式: (A-B)/C**2+SIN(X+Y) 。

请注意:

(1) 由于用“/”号作为除号,因此在写除法运算式子时应加上必要的括号。

(2) 乘号不能省略,如 ,必须写成 A*SIN(X),而不能写成 ASIN(X)。

(3)Fortran 中无大、中、小括号之分,一律用小括号。

(4) 乘方按“先右后左”原则处理。

(5) 对单项运算符(如-A 中的符号) 相当于在它前面有一个运算量“0”,如:-A**2 相当于 0-A**2 而非(-A)**2。

Fortran 算术表达式的求值运算的优先次序为:① 括号 > ② 函数 > ③ ** > ④ * / > ⑤ + -,即括号内的运算级别最高,加减最低。例如,SQRT(3.*2)**2 →

c) 表达式运算中的类型

Fortran 中的常量和变量是分类型的,允许在不同类型的算术量(包括整型、实型、双精度、复型) 之间进行算术运算,但不允许在算术量和非算术量(如逻辑型、字符型) 之间进行算术运算。F77 作如下规定:

同类型的算术量之间运算的结果仍保持原类型。

特别要注意:两个整数相除的商也是整数。例如,5/2 的值是 2 而不等于 2.5,4**(-1) 等于 0,应写为 5**(1./3.) 而非 5**(1/3)。

如果参加运算的两个算术量为不同类型,则编译系统会自动将它们转换成同一类型后进行运算。

转换的规律是:将低级类型转换成高级类型。类型的级别如下:整型(低)→实型(高)。类型的转换是从左向右进行的,在遇到不同类型的算术量时才进行转换。例如:1/2*1.0 等于 0,而 1./2*1 对于 0.5。

d) 运算的误差

整型量的运算是准确的,没有任何误差(只要在整数范围内)。而实型量的运算会出现一些误差。例如:11111.1×1111.11 本应得 12345654.321,但由于受实数有效位数的限制,只能得到 12345654.0。又如:0.001+1246825.0-1246820.0 本应得 5.001。但由于有效位数的限制,也将产生误差。[ e_143_01.f90 ] 为减小误差,在写表达式时应尽量使每一次运算结果都在有效位数范围之内,尽量不要使两个相差很大的数值直接相加或相减。在判断两个实数是否相等时,要特别慎重,最好改为判断,即 A 和 B 之差的绝对值如果小于(为一个很小的数,如 10-10),则认为 A 和 B 相等。

总之,在实数运算中应充分考虑到其可能出现的误差,而且在运算过程中误差会不断积累而增大,有时可能达到一个可观的程度。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文