算術システム関数

次の算術関数は、算術処理ステートメント(ADDCOMPUTEDIVIDEMULTIPLYSUBTRACT)および論理条件基準でサポートされています。

関数 フォーマット/長さ 説明
ABS(field) field と同じ field の絶対値。
ATN(field) F8(*) field アークタンジェント。
COS(field) F8(*)

field のコサイン。

EXP(field) F8(*) 基数 e、指数 field による累乗(すなわち efield。e はオイラー数)。
FRAC(field) field と同じ field の小数部分。
INT(field) field と同じ field の整数部分。
LOG(field) F8(*) field の自然対数。
SGN(field) field と同じ field の符号(-1、0、+1)。
SIN(field) F8(*)

field のサイン(正弦)。

SQRT(field) F8 (*)

field の平方根。

負の値の引数フィールドは正の値として扱われます。

TAN(field) F8(*)

field のタンジェント。

VAL(field) ターゲットフィールドと同じ

英数字 field から数値を抽出します。field の内容は、数値の英数字(コードページまたは Unicode)文字表現にする必要があります。field の先頭または末尾の空白は無視されます。小数点や先行符号文字は処理されます。

ターゲットフィールドの長さが不足している場合、小数は切り捨てられます(『プログラミングガイド』の「演算割り当てのルール」セクションの「フィールドの切り捨てと切り上げ」も参照)。

* これらの関数は次のように評価されます。

  • 引数は、フォーマット/長さが F8 に変換された後、計算のためにオペレーティングシステムに渡されます。

  • オペレーティングシステムによって返される結果のフォーマット/長さは F8 で、その後ターゲットフォーマットに変換されます。

算術関数(VAL を除く)で使用できる field は、定数またはスカラです。フォーマットは数値(N)、パック 10 進(P)、整数(I)、または浮動小数点(F)にする必要があります。

VAL 関数に使用できる field は、定数、スカラ、または配列です。フォーマットは英数字にする必要があります。

算術関数の例:

** Example 'MATHEX': Mathematical functions                             
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A     (N2.1) INIT <10>                                               
1 #B     (N2.1) INIT <-6.3>                                             
1 #C     (N2.1) INIT <0>                                                
1 #LOGA  (N2.6)                                                         
1 #SQRTA (N2.6)                                                         
1 #TANA  (N2.6)                                                         
1 #ABS   (N2.1)                                                         
1 #FRAC  (N2.1)                                                         
1 #INT   (N2.1)                                                         
1 #SGN   (N1)                                                           
END-DEFINE                                                              
*                                                                       
COMPUTE #LOGA = LOG(#A)                                                 
WRITE NOTITLE '=' #A 5X 'LOG'         40T #LOGA                         
*                                                                       
COMPUTE #SQRTA = SQRT(#A)                                               
WRITE         '=' #A 5X 'SQUARE ROOT' 40T #SQRTA
*                                               
COMPUTE #TANA  = TAN(#A)                        
WRITE         '=' #A 5X 'TANGENT'     40T #TANA 
*                                               
COMPUTE #ABS   = ABS(#B)                        
WRITE     //  '=' #B 5X 'ABSOLUTE'    40T #ABS  
*                                               
COMPUTE #FRAC  = FRAC(#B)                       
WRITE         '=' #B 5X 'FRACTIONAL'  40T #FRAC 
*                                               
COMPUTE #INT   = INT(#B)                        
WRITE         '=' #B 5X 'INTEGER'     40T #INT  
*                                               
COMPUTE #SGN   = SGN(#A)                        
WRITE      // '=' #A 5X 'SIGN'        40T #SGN  
*                                               
COMPUTE #SGN   = SGN(#B)                        
WRITE         '=' #B 5X 'SIGN'        40T #SGN  
*                                             
COMPUTE #SGN   = SGN(#C)                      
WRITE         '=' #C 5X 'SIGN'        40T #SGN
*                                             
END                                        

プログラム MATHEX の出力:

#A:  10.0     LOG                        2.302585
#A:  10.0     SQUARE ROOT                3.162277
#A:  10.0     TANGENT                    0.648360
                                                 
                                                 
#B:  -6.3     ABSOLUTE                   6.3     
#B:  -6.3     FRACTIONAL                -0.3     
#B:  -6.3     INTEGER                   -6.0     
                                                 
                                                 
#A:  10.0     SIGN                      1        
#B:  -6.3     SIGN                     -1        
#C:   0.0     SIGN                      0