このセクションでは、LIA-1 は「ISO/IEC 10967-1:1994 Information Technology - Language Independent Arithmetic - Part 1: Integer and floating-point arithmetic」を指します。
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 に対するユーザー例外処理を有効にすることができます。