日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:入出力について
第 3 章:文字/文字列/引数リスト関数
第 4 章:エラー処理とシグナル処理
第 5 章:サブプロセス関数
第 6 章:Curses画面管理関数とマクロ
第 7 章:算術関数
第 8 章:メモリ割り当て関数
第 9 章:システム関数
第 10 章:国際化ソフトウェアの開発
第 11 章:日付/時刻関数
第 12 章:シンボリックリンクとPOSIXパス名
付録 A:各OSバージョンでサポートする関数一覧
付録 B:非標準ヘッダに複製されているプロトタイプ
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (上巻)


目次 索引

第 7 章
算術関数

表 7-1 は, HP C Run-Time Library (RTL) の算術関数を示しています。各関数の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」を参照してください。

表 7-1 算術関数
関数 説明
abs 整数の絶対値を返す。
acos ラジアン単位の引数の逆余弦 (アークコサイン) を [0,pi] ラジアンの範囲で返す。
acosd (Alpha, I64) ラジアン単位の引数の逆余弦 (アークコサイン) を [0,180] 度の範囲で返す。
acosh (Alpha, I64) 引数の双曲線逆余弦 (アークコサイン) を返す。
asin ラジアン単位の引数の逆正弦 (アークサイン) を [ - pi/2,pi/2] ラジアンの範囲で返す。
asind (Alpha, I64) ラジアン単位の引数の逆正弦 (アークサイン) を [ -90,90 ] 度の範囲で返す。
asinh (Alpha, I64) 引数の双曲線逆正弦 (アークサイン) を返す。
atan ラジアン単位の引数の逆正接 (アークタンジェント) を [ - pi/2,pi/2] ラジアンの範囲で返す。
atand (Alpha, I64) ラジアン単位の引数の逆正接 (アークタンジェント) を [ -90,90 ] 度の範囲で返す。
atan2 y/ x (2 つのラジアン単位の引数) の逆正接 (アークタンジェント) を [ - pi,pi] ラジアンの範囲で返す。
atand2 (Alpha, I64) y/ x (2 つのラジアン単位の引数) の逆正接 (アークタンジェント) を [ -180,180 ] 度の範囲で返す。
atanh (Alpha, I64) ラジアン単位の引数の双曲線逆正接 (アークタンジェント) を返す。
cabs 複素数の絶対値を sqrt ( x 2 + y 2) として返す。
cbrt (Alpha, I64) 引数の四捨五入した立方根を返す。
ceil 引数に等しいか,それ以上の最小の整数を返す。
copysign (Alpha, I64) 最初の引数を 2 番目の引数と同じ符号で返す。
cos ラジアン単位の引数の余弦 (コサイン) をラジアン単位で返す。
cosd (Alpha, I64) ラジアン単位の引数の余弦 (コサイン) を度単位で返す。
cosh 引数の双曲線余弦 (コサイン) を返す。
cot ラジアン単位の引数の余接 (コタンジェント) をラジアン単位で返す。
cotd (Alpha, I64) ラジアン単位の引数の余接 (コタンジェント) を度単位で返す。
drand48 erand48
jrand48 lrand48
mrand48 nrand48
均一に分布した擬似乱数シーケンスを生成する。 48 ビットの負でない倍精度浮動小数点数値を返す。
erf (Alpha, I64) 引数のエラー関数を返す。
erfc (Alpha, I64) (1.0 - erf (x )) を返す。
exp e を底とする引数のべき乗を返す。
expm1 (Alpha, I64) exp (x ) - 1 を返す。
fabs 浮動小数点数値の絶対値を返す。
finite (Alpha, I64) 引数が有限の数値の場合は 1 を返し,無限の数値の場合は 0 を返す。
floor 引数に等しいか,それより小さい最大の整数を返す。
fmod 最初の引数を 2 番目の引数で除算した余りを浮動小数点数値として計算する。
fp_class (Alpha, I64) IEEE 浮動小数点数値のクラスを判断し, <fp_class.h> ヘッダ・ファイルから定数を返す。
isnan (Alpha, I64) NaN の判定をする。引数が NaN の場合は 1 を返し,それ以外の場合は 0 を返す。
j0, j1, jn (Alpha, I64) 第 1 種ベッセル関数を計算する。
frexp 浮動小数点数値の小数部と指数部を計算する。
hypot 2 つの引数の 2 乗の合計の平方根を返す。
initstate 乱数ジェネレータを初期化する。
labs 整数の絶対値を long int として返す。
lcong48 48 ビットの均一に分布した擬似乱数シーケンスを初期化する。
lgamma (Alpha, I64) ガンマ関数の対数を計算する。
llabs, qabs (Alpha, I64) __int64 整数の絶対値を返す。
ldexp 最初の引数に,2 を底とする 2 番目の引数のべき乗を乗算した値を返す。
ldiv, div 引数を除算して商と余りを返す。
lldiv, qdiv (Alpha, I64) 引数を除算して商と余りを返す。
log2 (Alpha, I64) ,log,log10 引数の対数を返す。
log1p (Alpha, I64) ln(1+ x) を正確に計算する。
logb (Alpha, I64) 基数に依存しない引数の指数を返す。
nextafter (Alpha, I64) y の方向に,マシンで表現可能な x の次の数値を返す。
nint (Alpha, I64) 引数に最も近い整数値を返す。
modf 最初の引数の正の小数部を返し,2 番目の引数によってアドレスが指定されるオブジェクトに整数部を代入する。
pow 最初の引数を底として,2 番目の引数のべき乗を返す。
rand, srand 0〜 2 31-1 の範囲で擬似乱数を返す。
random srandom よりランダムなシーケンスで擬似乱数を生成する。
rint (Alpha, I64) ユーザが指定した現在の IEEE 丸め方向に従って,引数を整数値に丸める。
scalb (Alpha, I64) 浮動小数点数値の指数部を返す。
seed48 srand48 48 ビットの乱数ジェネレータを初期化する。
setstate 再起動して,乱数ジェネレータを変更する。
sin ラジアン単位の引数の正弦 (サイン) をラジアン単位で返す。
sind (Alpha, I64) ラジアン単位の引数の正弦 (サイン) を度単位で返す。
sinh 引数の双曲線正弦 (サイン) を返す。
sqrt 引数の平方根を返す。
tan ラジアン単位の引数の正接 (タンジェント) をラジアン単位で返す。
tand (Alpha, I64) ラジアン単位の引数の正接 (タンジェント) を度単位で返す。
tanh 引数の双曲線正接 (タンジェント) を返す。
trunc (Alpha, I64) 引数を整数値に切り捨てる。
unordered (Alpha, I64) 引数のいずれか一方または両方が NaN の場合は 1 を返し,それ以外の場合は 0 を返す。
y0, y1, yn (Alpha, I64) 第 2 種ベッセル関数を計算する。



7.1 算術関数のバリアント---float,,long double (Alpha, I64)

OpenVMS Alpha システムと I64 システムでのみ, HP C に対して追加の算術演算ルーチンがサポートされます。これらのルーチンは <math.h>に定義されており, 表 7-1 に示したルーチンの floatバリアントと long doubleバリアントです。

float バリアントは float引数を受け付け, floatの値を返します。名前の最後に接尾語として fが付加されます。次の例を参照してください。


float cosf (float x); 
float tandf (float x); 

long double バリアントは long double引数を受け付け, long doubleの値を返します。名前の最後に接尾語として lが付加されます。次の例を参照してください。


long double cosl (long double x); 
long double tandl (long double x); 

算術演算ルーチンのバリアントはすべて,本書の「リファレンス・セクション」に説明されています。

/L_DOUBLE=64 を指定せずにコンパイルしたプログラム ( つまり,デフォルトの /L_DOUBLE=128 でコンパイルしたプログラム ) の場合,これらの HP C RTL 算術演算ルーチンの long doubleバリアントは,『HP Portable Mathematics Library (HPML)』マニュアルに説明されている X_FLOAT エントリ・ポイントにマッピングされます。

7.2 エラーの検出

実行時エラーを検出するのに役立つように, <errno.h>ヘッダ・ファイルには,多くの ( 全部ではない ) 算術関数から返される次の 2 つのシンボル値が定義されています。

  • EDOM は,引数が不適切であることを示します。引数が関数の領域の範囲内にありません。

  • ERANGE は,結果が適切な範囲内にないことを示します。引数が大きすぎるか小さすぎるために,マシンで表現できません。

算術関数を使用する場合,外部変数 errnoを調べて,これらの値のいずれか一方または両方が格納されていないかどうかを確認し,エラーが発生している場合は適切な処置を実行します。

次のプログラムの例では, errno変数の値が EDOM でないかどうかを調べます。この値は, sqrt関数に対する入力として負の数値が指定されたことを示します。


#include <errno.h> 
#include <math.h> 
#include <stdio.h> 
 
main() 
{ 
   double input, square_root; 
 
   printf("Enter a number: "); 
   scanf("%le", &input); 
   errno = 0; 
   square_root = sqrt(input); 
 
   if (errno == EDOM) 
      perror("Input was negative"); 
   else 
      printf("Square root of %e = %e\n", 
              input, square_root); 
} 

errnoでこのシンボル値を調べなかった場合,負の値が入力されると, sqrt関数は 0 を返します。 <errno.h>ヘッダ・ファイルの詳細については, 第 4 章 を参照してください。

7.3 <fp.h> ヘッダ・ファイル

<fp.h>ヘッダ・ファイルは, ANSI X3J11 委員会の Numerical C Extensions Group が定義している一部の機能を実装しています。浮動小数点関数を広範囲にわたって使用するアプリケーションの場合は,このヘッダ・ファイルが役立ちます。

この章に示した一部の倍精度関数は,結果が表現できない範囲である場合,±HUGE_VAL ( <math.h>または <fp.h>に定義) という値を返します。これらの関数の floatバージョンは,同じ条件で HUGE_VALF ( <fp.h>にのみ定義) という値を返します。 long doubleバージョンは, HUGE_VALL ( <fp.h>に定義) という値を返します。

IEEE の無限大および NaN の値を有効にしてコンパイルされたプログラムの場合,HUGE_VAL,HUGE_VALF,HUGE_VALL という値は式であり,コンパイル時定数ではありません。次のような初期化を行うと,コンパイル時エラーが発生します。


$ CREATE IEEE_INFINITY.C 
#include <fp.h> 
 
double my_huge_val = HUGE_VAL 
^Z 
$ CC /FLOAT=IEEE/IEEE=DENORM IEEE_INFINITY 
 
double my_huge_val = HUGE_VAL; 
.....................^ 
%CC-E-NEEDCONSTEXPR, In the initializer for my_huge_val, "decc$gt_dbl_infinity" 
is not constant, but occurs in a context that requires a constant expression. 
at line number 3 in file WORK1$:[RTL]IEEE_INFINITY.C;1 
$ 

<math.h>および <fp.h>の両方を使用する場合, <math.h>は関数 isnanを定義し, <fp.h>は同じ名前のマクロを定義します。アプリケーションで最初に取り込まれたヘッダ・ファイルが isnanに対する参照を解決します。

7.4 例

例 7-1 は, tansincos関数がどのように動作するかを示しています。

例 7-1 正接 (タンジェント) 値の計算と検証

/*        CHAP_7_MATH_EXAMPLE.C                                 */ 
 
/* This example uses two functions --- mytan and main ---       */ 
/* to calculate the tangent value of a number, and to check     */ 
/* the calculation using the sin and cos functions.             */ 
 
#include <math.h> 
#include <stdio.h> 
 
/* This function calculates the tangent using the sin and       */ 
/* cos functions.                                               */ 
 
double mytan(x) 
    double x; 
{ 
    double y, 
           y1, 
           y2; 
 
    y1 = sin(x); 
    y2 = cos(x); 
 
    if (y2 == 0) 
        y = 0; 
    else 
        y = y1 / y2; 
 
    return y; 
} 
main() 
{ 
    double x; 
 
    /*  Print values: compare   */ 
    for (x = 0.0; x < 1.5; x += 0.1) 
        printf("tan of %4.1f = %6.2f\t%6.2f\n", x, mytan(x), tan(x)); 
} 

例 7-1 は次の出力を生成します。


$ RUN  EXAMPLE
tan of  0.0 =   0.00      0.00
tan of  0.1 =   0.10      0.10
tan of  0.2 =   0.20      0.20
tan of  0.3 =   0.31      0.31
tan of  0.4 =   0.42      0.42
tan of  0.5 =   0.55      0.55
tan of  0.6 =   0.68      0.68
tan of  0.7 =   0.84      0.84
tan of  0.8 =   1.03      1.03
tan of  0.9 =   1.26      1.26
tan of  1.0 =   1.56      1.56
tan of  1.1 =   1.96      1.96
tan of  1.2 =   2.57      2.57
tan of  1.3 =   3.60      3.60
tan of  1.4 =   5.80      5.80
$ 


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項