在本节中,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 编译器(cc 和 f95),在以下几个方面符合 LIA-1(段落字母编号与 LIA-1 第 8 节对应):
LIA-1 符合标准的类型为 C int 和 Fortran INTEGER。也可以遵从其他类型,但此处未指明。特定语言的更多规范尚待审理语言标准组织将语言结合到 LIA-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)
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
下表显示了可以实现 LIA 整数运算的表示法。
|
以下代码显示了 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
缺省情况下,在未指定任何优化时,表达式按照 int (C) 或 INTEGER (Fortran) 精度求值。建议使用括号。未使用括号的联合表达式的求值顺序未指定,例如 a + b + c 或 a * b * c。
将b.参数 (LIA 5.1): 中的定义包含在您的源代码中。
整数异常为 x/0 和 x%0 或 mod(x,0)。缺省情况下,这些异常生成 SIGFPE。没有为 SIGFPE 指定信号处理程序时,进程将会终止并且转储内存。
signal(3) 或 signal(3F) 可用于启用 SIGFPE 的用户异常处理。