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」を指します。

Sun Studio コンパイラのリリースに含まれている C および Fortran 95 コンパイラ (cc および f95) は、次の点で 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)
上記を参照
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 に対するユーザー例外処理を有効にすることができます。