Oracle® Developer Studio 12.5:数值计算指南

退出打印视图

更新时间: 2016 年 6 月
 
 

5.2 LIA-1 符合性

在本节中,LIA-1 指的是 ISO/IEC 10967-1:1994 Information Technology - Language Independent Arithmetic - Part 1: Integer and floating-point arithmetic(ISO/IEC 10967-1:1994 信心技术 - 语言独立技术 - 第 1 部分:整数和浮点计算)。

Sun Studio 编译器发行版中包含的 C 和 Fortran 95 编译器(ccf95),在以下几个方面符合 LIA-1(段落字母编号与 LIA-1 第 8 节对应):

E.2.1 a.类型 (LIA 5.1):

LIA-1 符合标准的类型为 C int 和 Fortran INTEGER。也可以遵从其他类型,但此处未指明。特定语言的更多规范尚待审理语言标准组织将语言结合到 LIA-1。

E.2.2 b.参数 (LIA 5.1):

#include <values.h> /* defines MAXINT */
#define TRUE 1
#define FALSE 0
#define BOUNDED TRUE
#define MODULO TRUE
#define MAXINT 2147483647
#define MININT ‐2147483648
 logical bounded, modulo
 integer maxint, minint
 parameter (bounded = .TRUE.)
 parameter (modulo = .TRUE.)
 parameter (maxint = 2147483647)
 parameter (minint = ‐2147483648)

E.2.3 d.DIV/REM/MOD (LIA 5.1.3):

C / 和 %,以及 Fortran / 和 mod(),提供 DIVtI(x,y)REMtI(x,y)。此外,modaI(x,y) 提供了以下代码:

int modaI(int x, int y) {
 int t = x % y;
 if (y < 0 && t > 0)
 t ‐= y;
 else if (y > 0 && t < 0)
 t += y;
  return t;
 }

还提供了以下代码:

 integer function modaI(x, y)
 integer x, y, t
 t = mod(x, y)
 if (y .lt. 0 .and. t .gt. 0) t = t ‐ y
 if (y .gt. 0 .and. t .lt. 0) t = t + y
 modaI = t
 return
 end

E.2.4 i.表示法 (LIA 5.1.3):

下表显示了可以实现 LIA 整数运算的表示法。

表 43  LIA-1 符合性-表示法
LIA
C
Fortran(如有不同)
addI(x,y)
x+y
n/a
subI(x,y)
x‐y
n/a
mulI(x,y)
x*y
n/a
divtI(x,y)
x/y
n/a
remtI(x,y)
x%y
mod(x,y)
modaI(x,y)
see above
n/a
negI(x)
‐x
n/a
absI(x)
#include <stdlib.h>
abs(x)
abs(x)
signI(x)
#define signI(x) (x > 0
? 1 : (x < 0 ? ‐1 : 0))
请参见下文
eqI(x,y)
x==y
x.eq.y
neqI(x,y)
x!=y
x.ne.y
lssI(x,y)
x<y
x.lt.y
leqI(x,y)
x<=y
x.le.y
gtrI(x,y)
x>y
x.gt.y
geqI(x,y)
x>=y
x.ge.y

以下代码显示了 signI(x) 的 Fortran 表示法。

integer function signi(x)
integer x, t
if (x .gt. 0) t=1
if (x .lt. 0) t=‐1
if (x .eq. 0) t=0
return
end

E.2.5 j.表达式求值:

缺省情况下,在未指定任何优化时,表达式按照 int (C) 或 INTEGER (Fortran) 精度求值。建议使用括号。未使用括号的联合表达式的求值顺序未指定,例如 a + b + c 或 a * b * c。

E.2.6 k.获取参数的方法:

b.参数 (LIA 5.1): 中的定义包含在您的源代码中。

E.2.7 n.通知:

整数异常为 x/0 和 x%0 或 mod(x,0)。缺省情况下,这些异常生成 SIGFPE。没有为 SIGFPE 指定信号处理程序时,进程将会终止并且转储内存。

E.2.8 o.选择机制:

signal(3) 或 signal(3F) 可用于启用 SIGFPE 的用户异常处理。