科学技術計算プログラム 使用法


index 目次

1. コーディング上の注意

2. ライブラリ一覧

(a) 複素数 (g) 高速フーリエ変換 (m) 分散分析
(b) 一般・特殊関数 (h) 補間 (n) 検定
(c) 微積分 (i) 標準統計量 (o) 区間推定
(d) 代数方程式 (j) 確率分布 (p) 常微分方程式
(e) 連立1次方程式 (k) グラフィックス・ユーティリティ (q) その他
(f) 行列 (l) 回帰



1.コーディング上の注意        index (目次に戻る)

  1. #include "sslib.h" を指定して下さい。

     注 : 内部で,標準ヘッダファイル <math.h> をインクルードしています。

  2. 引数として、2次元配列を必要とする関数は、C言語上の制約より1次元配列で渡します。
    (例:本来 x [m][n] の配列を x [m × n] の1次元とし、別に列数 n を渡します。)


2.ライブラリ一覧

(1) 外部参照

以下のライブラリ関数は,処理する関数を外部参照している為,当該ライブラリ関数使用時には,ユーザ側で定義して下さい。

ライブラリ関数 参照関数名及び型
cheb3( ), cheb4( ), cheb6( ) double chfunc( )
dgh10( ), dgh15( ) double hfunc( )
dgl3( ), dgl10( ), dgl20( ), dgl32( ), dgl48( ) double glfunc( )
dglg3( ), dglg5( ), dglg10( ) double lgfunc( )
hardy( ), lomberg( ), nc1( ), nc2( ), nc3( ), nc4( ), nc5( ),
nc6( ), nc7( ), nc8( ), weddle( ), difm1( ), difm2( ),
difm3( ), difm4( ), difm5( ), difm6( ), difm7( ), difm8( ),
diff2( ), diff3( ), diff4( ), diff5( ), difb2( ), difb3( ),
difb4( ), difb5( )
double _f( )
regula( ) double rfunc( )
rngkg( ), hamng( ) double _fxy( )
rngkgm( ) double _fmxy( )


(2) 構造体

下記構造体を定義、使用しています。

typedef struct
	{
		double r, i;
	} Complex;
複素数型

( r:実数部、i:虚数部)


(3) 要素ライブラリ         index (目次に戻る)

(a) complex.c : 複素数ライブラリ

関数名及び型 引数及び型 関数の機能
Complex cadd(a, b) Complex a, b; 四則演算系 加算
Complex csub(a, b) Complex a, b; 減算
Complex cmul(a, b) Complex a, b; 乗算
Complex cmul1(a, k) Complex a;
double k;
乗算(対 double )
Complex cdiv(a, b) Complex a, b; 除算
Complex cdiv1(a, k) Complex a;
double k;
除算(対 double )
Complex cpow(a, b) Complex a, b; ベキ乗
Complex cpowd(a, n) Complex a;
double n;
ベキ乗(対 double )
Complex cln(a) Complex a; 対数関数 自然対数
Complex clog10(a) Complex a; 常用対数
Complex cexp(a) Complex a; 指数関数
Complex csin(a) Complex a; 三角関数 正弦関数
Complex ccos(a) Complex a; 余弦関数
Complex ctan(a) Complex a; 正接関数
Complex csqrt(a) Complex a; 平方根
Complex tocomplex(x, y) double x, y; double → Complex データ変換
Complex conj(a) Complex a; 複素共役
Complex cfunc(a, n, x) Complex *a, x;
int n;
複素係数代数多項式の値計算
double cabslt(a) Complex a; 絶対値
double carg(a) Complex a; 偏角
int cne(a, b) Complex a, b; 判定 異値判定
int ceq(a, b) Complex a, b; 等値判定


(b) function.c : 一般・特殊関数ライブラリ        index (目次に戻る)

関数名及び型 引数及び型 関数の機能
double cbrt(a) double a; 立方根
double besj0(x) double x; ベッセル関数 第1種 J0(x)
double besj1(x) double x; 第1種 J1(x)
double besy0(x) double x; 第2種 Y0(x)
double besy1(x) double x; 第2種 Y1(x)
double besi0(x) double x; 第1種変形 I0(x)
double besi1(x) double x; 第1種変形 I1(x)
double besk0(x) double x; 第2種変形 K0(x)
double besk1(x) double x; 第2種変形 K1(x)
double erfnc(x) double x; 誤差関数
double gammaf(x) double x; ガンマ関数Γ(x)
double legend(x, n) double x;
int n;
ルジャンドルの多項式
double celi1(k, eps) double k, eps; 完全楕円積分 第1種 K(k)
double celi2(k, eps) double k, eps; 第2種 E(k)


(c) difint.c, bibun.c, simp.c : 微積分ライブラリ              index (目次に戻る)

関数名及び型 引数及び型 関数の機能
double lagdif(xd, yd, n, xx) double *xd, *yd, xx;
int n;
数値微分 ラグランジェ法
double spldif(xd, yd, n, xx) double *xd, *yd, xx;
int n;
3次スプライン関数法
void subspl(x, y, n, h, sp) double *x, *y, *h, *sp;
int n;
3次スプライン関数ルーチン
double trap(xx, yy, n) double *xx, *yy;
int n;
1次元
有限区間積分
台形法
double simpei(y, n, h) double *y, h;
int n;
シンプソン法 等間隔
double simpui(xx, yy, n) double *xx, *yy;
int n;
不等間隔
double splitg(xx, yy, n) double *xx, *yy;
int n;
3次スプライン関数法
double cheb3(a, b) double a, b; チェビシェフ法 3点法
double cheb4(a, b) double a, b; 4点法
double cheb6(a, b) double a, b; 6点法
double dgl3(a, b) double a, b; ガウス・
ルジャンドル法
3分点
double dgl10(a, b) double a, b; 10分点
double dgl20(a, b) double a, b; 20分点
double dgl32(a, b) double a, b; 32分点
double dgl48(a, b) double a, b; 48分点
double dglg3()   1次元
半無限区間積分
ガウス・
ラゲール法
3分点
double dglg5()   5分点
double dglg10()   10分点
double dgh10()   1次元
全無限区間積分
ガウス・
エルミート法
10分点
double dgh15()   15分点
double simpe2(y, m, n, h1, h2) double *y, h1, h2;
int m, n;
2次元
有限区間積分
等間隔シンプソン法
double hardy(xmin, xmax, n) double xmin, xmax;
int n;
1次元
有限区間積分
ハーディ法
double lomberg(xmin, xmax, eps) double xmin, xmax, eps; ロンバーグ法
double nc1(xmin, xmax, n) double xmin, xmax;
int n;
ニュートン・
コーツ式
第1式
double nc2(xmin, xmax, n) double xmin, xmax;
int n;
第2式
double nc3(xmin, xmax, n) double xmin, xmax;
int n;
第3式
double nc4(xmin, xmax, n) double xmin, xmax;
int n;
第4式
double nc5(xmin, xmax, n) double xmin, xmax;
int n;
第5式
double nc6(xmin, xmax, n) double xmin, xmax;
int n;
第6式
double nc7(xmin, xmax, n) double xmin, xmax;
int n;
第7式
double nc8(xmin, xmax, n) double xmin, xmax;
int n;
第8式
double weddle(xmin, xmax, n) double xmin, xmax;
int n;
ウェドル法
double _Normal(a, b, x) double a, b, x; 積分区間正規化変換関数
double difm1(x, h) double x, h; 数値微分 中点法 1次
double difm2(x, h) double x, h; 2次
double difm3(x, h) double x, h; 3次
double difm4(x, h) double x, h; 4次
double difm5(x, h) double x, h; 5次
double difm6(x, h) double x, h; 6次
double difm7(x, h) double x, h; 7次
double difm8(x, h) double x, h; 8次
double diff2(x, h) double x, h; 前進法 2次
double diff3(x, h) double x, h; 3次
double diff4(x, h) double x, h; 4次
double diff5(x, h) double x, h; 5次
double difb2(x, h) double x, h; 後退法 2次
double difb3(x, h) double x, h; 3次
double difb4(x, h) double x, h; 4次
double difb5(x, h) double x, h; 5次


(d) poly.c, regula.c : 代数方程式ライブラリ                 index (目次に戻る)

関数名及び型 引数及び型 関数の機能
void qurt(a, b, c, x) Complex a, b, c, *x; 2次代数方程式
void carda(a, x) double *a;
Complex *x;
3次代数方程式 カルダノ法
double newton(a, n, eps, iter) double *a, eps;
int n, iter;
高次代数方程式 ニュートン法
void bairs(a, n, eps, iter, x) double *a, eps;
int n, iter;
Complex *x;
ベアストウ法
double regula(xs, xe, h, eps, iter) double xs, xe, h, eps;
int iter;
超越代数方程式 レギュラ・ファルシ法
int cnewton(a, r, n, eps, iter) Complex a[ ], r[ ];
double eps;
int n, iter;
複素係数高次代数方程式 ニュートン法
int dka(a, r, n, eps, iter) Complex *a, *r;
double eps;
int n, iter;
DKA法


(e) linear.c : 連立1次方程式ライブラリ                  index (目次に戻る)

関数名及び型 引数及び型 関数の機能
void gausei(a, l, m, iter, eps, x) double *a, eps, *x;
int l, m, iter;
実係数連立1次方程式 ガウス・ザイデル法
void gauss(a, l, m, n, eps) double *a, eps;
int l, m, n;
ガウス消去法
void gaujor(a, l, m, n, eps) double *a, eps;
int l, m, n;
ガウス・ジョルダン法
int ludcmp(aa, b, x, eps, n) double *aa, *b, *x, eps;
int n;
LU分解法
int cgm(a, b, x, n) double *a, *b, *x;
int n;
共役傾斜法
int trdiam(al, am, au, b, n, x) double *al, *am, *au, *b, *x;
int n;
三角対角行列の解法
void cgauj(a, l, m, n, eps) Complex *a;
int l, m, n;
double eps;
複素係数連立1次方程式 ガウス・ジョルダン法


(f) matrix.c : 行列ライブラリ                       index (目次に戻る)

関数名及び型 引数及び型 関数の機能
void madd(a, b, c, la, lb, lc, m, n) double *a, *b, *c;
int la, lb, lc, m, n;
加算
void msub(a, b, c, la, lb, lc, m, n) double *a, *b, *c;
int la, lb, lc, m, n;
減算
void mmul1(a, b, la, lb, m) double *a, *b;
int la, lb, m;
乗算
void mmul2(a, b, c, la, lb, lc, m, n, k) double *a, *b, *c;
int la, lb, lc, m, n, k;
乗算
void mtra1(a, l, m, n) double *a;
int l, m, n;
転置
void mtra2(a, b, la, lb, m, n) double *a, *b;
int la, lb, m, n;
転置
double minver(a, l, m, eps) double *a, eps;
int l, m;
逆行列と行列式の値
void mmove(a, b, la, lb, m, n) double *a, *b;
int la, lb, m, n;
コピー
void mswap(a, b, la, lb, m, n) double *a, *b;
int la, lb, m, n;
入替え
int jacobi(a, v, l, m, nr, eps) double *a, *v;
int l, m, *nr;
double eps;
実対称行列の固有値と
固有ベクトル
( ヤコビ法 )


(g) fft.c : 高速フーリエ変換ライブラリ            index (目次に戻る)

関数名及び型 引数及び型 関数の機能
void fft1(ar, ai, n, iter, flag) double *ar, *ai;
int n, iter, flag;
高速フーリエ変換 1次元 double 型データ
void fft1x(a, n, iter, flag) Complex *a;
int n, iter, flag;
Complex 型データ
void fft2(ar, ai, n, nmax, flag) double *ar, *ai;
int n, nmax, flag;
2次元 double 型データ
void fft2x(a, n, nmax, flag) Complex *a;
int n, nmax, flag;
Complex 型データ


(h) interp.c : 補間ライブラリ

関数名及び型 引数及び型 関数の機能
void lstsq(x, y, n, m, c) double *x, *y, *c;
int n, m;
最小2乗近似法
double lagra(xx, yy, n, xi) double *xx, *yy, xi;
int n;
ラグランジェ補間
double splint(xx, yy, n, xi) double *xx, *yy, xi;
int n;
スプライン補間
void chebyshev(min, max, n, a) double max, min, *a;
int n;
チェビシェフ近似
double polynomial(a, x, n) double *a, x;
int n;
多項式計算


(i) basstat.c : 標準統計量ライブラリ         index (目次に戻る)

関数名及び型 引数及び型 関数の機能
void sorti1(a, n) int *a, n; int 型データ 昇順ソート
void sorti2(a, n) int *a, n; 降順ソート
void sortii1(a, n, jun) int *a, n, *jun; 昇順間接ソート
void sortii2(a, n, jun) int *a, n, *jun; 降順間接ソート
void sortd1(a, n) double *a;
int n;
double 型データ 昇順ソート
void sortd2(a, n) double *a;
int n;
降順ソート
void sortdi1(a, n, jun) double *a;
int n, *jun;
昇順間接ソート
void sortdi2(a, n, jun) double *a;
int n, *jun;
降順間接ソート
int stat(a, n, min, max, amp,
sum, sum2, ave, gmean,
hmean, amad, s, v, st,
uv, squv, cv, sk, ku)
double a[ ], *min, *max;
double *amp, *sum;
double *sum2, *ave;
double *gmean, *hmean;
double *amad, *s, *v;
double *st, *uv, *squv;
double *cv, *sk, *ku;
int n;
基本統計量計算
void swapi(a, b) int *a, *b; データ入替え int 型データ
void swapd(a, b) double *a, *b; double 型データ
void swapc(a, b) char *a, *b; char 型データ
void swapx(a, b) Complex *a, *b; Complex 型データ


(j) dist.c : 確率分布ライブラリ           index (目次に戻る)

関数名及び型 引数及び型 関数の機能
double qnorm(u) double u; 正規分布 累積確率
double pnorm(qn) double qn; パーセント点
double qchi(x2, n) double x2;
int n;
χ2分布 上側確率
double pchi(qc, n) double qc;
int n;
パーセント点
double qt(t, n) double t;
int n;
t分布 両側確率
void qtsub(q, n, w2, w3, t2) double *q, w2, w3, t2;
int n;
両側確率用
スレーブルーチン
double pt(q, n) double q;
int n;
パーセント点
double ptsub(q, n) double q;
int n;
パーセント点用
スレーブルーチン
double qf(f, n1, n2) double f;
int n1, n2;
F分布 上側確率
double pf(q, n1, n2) double q;
int n1, n2;
パーセント点
double pfsub(x, y, z) double x, y, z; パーセント点用
スレーブルーチン


(k)axis.c : グラフィックス・ユーティリティライブラリ              index (目次に戻る)

関数名及び型 引数及び型 関数の機能
int dtor(deg, rad) double deg;
double *rad;
角度変換 度→ラジアン
int rtod(rad, deg) double rad;
double *deg;
ラジアン→度
int dtop2(xo, yo, r, t) double xo, yo;
double *r, *t;
2次元 座標変換 デカルト座標→極座標
int ptod2(r, t, x, y) double r, t;
double *x, *y;
極座標→デカルト座標
int dmov2(xo, yo, xm, ym, x, y) double xo, yo, xm, ym;
double *x, *y;
平行移動 デカルト座標
int pmov2(ro, to, xm, ym, r, t); double ro, to, xm, ym;
double *r, *t;
極座標
int drot2(xo, yo, t, x, y) double xo, yo, t;
double *x, *y;
回転移動 デカルト座標
int prot2(ro, to, trot, r, t) double ro, to, trot;
double *r, *t;
極座標
int dtoc3(dx, dy, dz,
cr, ct, cz)
double dx, dy, dz;
double *cr, *ct, *cz;
3次元 座標変換 デカルト座標→円柱座標
int ctod3(cr, ct, cz,
dx, dy, dz);
double cr, ct, cz;
double *dx, *dy, *dz;
円柱座標→デカルト座標
int dtop3(dx, dy, dz,
pr, pe, pp)
double dx, dy, dz;
double *pr, *pe, *pp
デカルト座標→極座標
int ptod3(pr, pe, pp,
dx, dy, dz)
double pr, pe, pp;
double *dx, *dy, *dz;
座標変換 極座標→デカルト座標
int ptoc3(pr, pe, pp,
cr, ct, cz)
double pr, pe, pp;
double *cr, *ct, *cz;
極座標→円柱座標
int ctop3(cr, ct, cz,
pr, pe, pp)
double cr, ct, cz;
double *pr, *pe, *pp;
円柱座標→極座標
int dpmov3(xo, yo, zo,
dx, dy, dz,
x, y, z)
double xo, yo, zo;
double dx, dy, dz;
double *x, *y, *z;
平行移動 デカルト座標
int cpmov3(cro, cto, czo,
dx, dy, dz,
cr, ct, cz)
double cro, cto, czo;
double dx, dy, dz;
double *cr, *ct, *cz;
円柱座標
int ppmov3(pro, peo, ppo,
dx, dy, dz,
pr, pe, pp)
double pro, peo, ppo;
double dx, dy, dz;
double *pr, *pe, *pp;
極座標
int drot3(dxo, dyo, dzo,
phai, thet, psai,
dx, dy, dz)
double dxo, dyo, dzo;
double phai, thet, psai;
double *dx, *dy, *dz;
回転移動 デカルト座標
int crot3(cro, cto, czo,
phai, thet, psai,
cr, ct, cz)
double cro, cto, czo;
double phai, thet, psai;
double *cr, *ct, *cz;
円柱座標
int prot3(pro, peo, ppo,
phai, thet, psai,
pr, pe, pp)
double pro, peo, ppo;
double phai, thet, psai;
double *pr, *pe, *pp;
極座標


(l) corr.c : 回帰ライブラリ              index (目次に戻る)

関数名及び型 引数及び型 関数の機能
int corr(x, y, n, xbar, ybar, uxy, r0) double x[ ], y[ ];
int n;
double xbar, ybar;
double *uxy, *r0;
相関係数
int sreg(x, y, n, sx, g,
a, b, dyx, va, vb, al, au, bl, bu)
double x[ ], y[ ];
int n;
double sx, g;
double *a, *b, *dyx, *va, *vb;
double *al, *au, *bl, *bu;
単回帰分析


(m) vari.c : 分散分析ライブラリ

関数名及び型 引数及び型 関数の機能
int aov1(x, n, l, m, al,
sa, se, st, nua, nue, nut, va, ve, f0, f)
double x[ ];
int n[ ];
int l, m;
double al;
double *sa, *se, *st;
double *va, *ve, *f0, *f;
int *nua, *nue, *nut;
1元配置
int aov2(x, l, m, n, al,
sa, sb, se, st, nua, nub, nue, nut,
va, vb, ve, f0a, f0b, fa, fb)
double x[ ];
int l, m, n;
double al;
double *sa, *sb, *se, *st;
double *va, *vb, *ve;
double *f0a, *f0b, *fa, *fb;
int *nua, *nub, *nue, *nut;
2元配置


(n) test.c : 検定ライブラリ              index (目次に戻る)

関数名及び型 引数及び型 関数の機能
int mtst1(n, xbar, pm, pv, al, sw, u0, u) int n
double xbar, pm, pv, al;
int *sw;
double *u0, *u;
母平均検定 母分散既知
int mtst2(n, xbar, pm, uv, al, sw, t0, t) int n;
double xbar, pm, uv, al;
int *sw;
double *t0, *t;
母分散未知
int mdtst1(n1, n2, xbar1, xbar2,
pv1, pv2, al,
sw, u0, u)
int n1, n2;
double xbar1, xbar2, pv1, pv2, al;
int *sw;
double *u0, *u;
2つの母平均の
差の検定
母分散既知
int mdtst2(n1, n2, xbar1, xbar2,
s1, s2, al,
sw, t0, t)
int n1, n2;
double xbar1, xbar2, s1, s2, al;
int *sw;
double *t0, *t;
母分散未知
(等しい)
int mdtst3(n1, n2, xbar1, xbar2,
uv1, uv2, al,
sw, t0, t)
int n1, n2;
double xbar1, xbar2, uv1, uv2, al;
int *sw;
double *t0, *t;
母分散未知
(異なる)
int nbptst(n, ps, pp, al, sw, u0, u) int n;
double ps, pp, al;
int *sw;
double *u0, *u;
母百分率
(不良率)の検定
正規分布検定
int fbptst(n, ps, pp, al, sw, f0, f) int n;
double ps, pp, al;
int *sw;
double *f0, *f;
F分布検定
int bpdtst(n1, n2, ps1, ps2, al, sw, u0, u) int n1, n2;
double ps1, ps2, al;
int *sw;
double *u0, *u;
2つの母百分率(不良率)の
差の検定
int vtst(sw1, n, s, v, al,
sw2, x20, x21, x22)
int sw1, n;
double s, v, al;
int *sw2;
double *x20, *x21, *x22;
母分散の検定
int vdtst(n1, n2, uv1, uv2, al, sw, f0, f) int n1, n2;
double uv1, uv2, al;
int *sw;
double *f0, *f;
等分散の検定
int cont22(sw, a, b, c, d, al, x20, x2) int *sw;
double a, b, c, d, al;
double *x20, *x2;
独立性検定 2元分割表
int contlm(l, m, a, al, ac, ar,
at, ef, x20, x2, sw)
int l, m;
double a[ ], ac[ ], ar[ ], ef[ ];
double al, *at, *x20, *x2;
int *sw;
L×M分割表
int thomp(n, xk, xbar, v, al, sw, t0, t) int n;
double xk, xbar, v, al;
int *sw;
double *t0, *t;
棄却検定(Thompsonの方法)
int rttst(n, r0, al, sw, t0, t) int n;
double r0, al;
int *sw;
double *t0, *t;
無相関のt検定
int rptst(n, r0, rp, al, sw, u0, u) int n;
double r0, rp, al;
int *sw;
double *u0, *u;
母相関係数の検定
int rptst2(n1, n2, r01, r02, al, sw, u0, u) int n1, n2;
double r01, r02, al;
int *sw;
double *u0, *u;
2つの母集団の
母相関係数の等値検定


(o)esti.c : 区間推定ライブラリ           index (目次に戻る)

関数名及び型 引数及び型 関数の機能
int mest1(n, xbar, pv, g, xl, xu) int n;
double xbar, pv, g;
double *xl, *xu;
母平均の
区間推定
母分散既知
int mest2(n, xbar, squv, g, xl, xu) int n;
double xbar, squv, g;
double *xl, *xu;
母分散未知
int mdest1(n1, n2, xbar1, xbar2,
pv1, pv2, g, xl, xu)
int n1, n2;
double xbar1, xbar2;
double pv1, pv2, g;
double *xl, *xu;
母平均の差の
区間推定
母分散既知
int mdest2(n1, n2, xbar1, xbar2,
v1, v2, g, xl, xu)
int n1, n2;
double xbar1, xbar2;
double v1, v2, g;
double *xl, *xu;
母分散未知(等しい)
int vest(sw, n, s, g, xl, xu) int sw, n;
double s, g;
double *xl, *xu;
母分散の区間推定
int vpest(n1, n2, uv1, uv2, g, xl, xu) int n1, n2;
double uv1, uv2, g;
double *xl, *xu;
母分散の比の区間推定
int bpest(n, ps, g, xl, xu) int n;
double ps, g;
double *xl, *xu;
母百分率(不良率)の
区間推定
int bpdest(n1, n2, ps1, ps2, g, xl, xu) int n1, n2;
double ps1, ps2, g;
double *xl, *xu;
2つの母百分率(不良率)の
差の区間推定
int rest(n, r0, g, xl, xu) int n;
double r0, g;
double *xl, *xu;
母相関係数の区間推定


(p)rkg.c : 常微分方程式ライブラリ            index (目次に戻る)

関数名及び型 引数及び型 関数の機能
int rngkg(x0, y0, n, h, y) double x0, y0, h, y[ ];
int n;
1階常微分方程式 ルンゲ・クッタ・ギル法
int hamng(x0, y0, n, h, y) double x0, y0, h, y[ ];
int n;
ハミング法
int rngkgm(x, y, h, multi, n) double x, y[ ], h;
int multi, n;
連立1階常微分方程式 ルンゲ・クッタ・ギル法


(q) etc.c : その他関数ライブラリ            index (目次に戻る)

関数名及び型 引数及び型 関数の機能
double normal(av, st) double av, st; 乱数 正規乱数
double rnd( )   一様乱数
int poison(av) double av; ポアソン乱数
double bino(m, n) int m, n; 2項係数
void filt(ts, te, f, nt, n, m,
a1, b1, a, k1, k2, p)
double ts, te, *f;
double *a1, *b1, a;
double k1, k2;
int nt, n, m, p;
逆ラプラス変換
double kaijo1(n) int n; 階乗
double kaijo2(n) int n;
double log_kai1(n) int n; 階乗の常用対数
double log_kai2(n) int n;
void minmax_i(a, n, min, max) int a[ ];
int n;
int *min, *max;
最大値、最小値 int 型配列
void minmax_d(a, n, min, max) double a[ ];
int n;
double *min, *max;
double 型配列
void minmax_c(a, n, min, max) unsigned char a[ ];
int n;
unsigned char *min, *max;
unsigned char 型配列