多倍長浮動小数点演算(MPA)ライブラリ 使用法

MPA : Multiple-Precision Arithmetic

index目次

  1. コーディング上の注意
  2. ライブラリ一覧

MPAライブラリは,多倍長浮動小数点演算をサポートするライブラリである。
現ライブラリでは,最大10進約450桁までの演算をサポートする。
(mpa_d.h の定義を変更し,ライブラリ再構築を行えば,拡張は可能。
但し,定数の再計算の為,m_mak_v.c を実行し,mpa_v.h の再設定要。)

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

#include "mpa.h" を指定すること。
   注:内部で,標準ヘッダファイル <stdio.h>, <math.h>, <string.h>,
<time.h>, <values.h>, 及び "mpa_d.h", "mpa_p.h", "mpa_v.h" を
インクルードしている。

2.ライブラリ一覧         index(目次に戻る)

(1) 構造体         index(目次に戻る)

   "mpa_d.h" 内で、多倍長浮動小数の1要素を、下記構造体として定義している。

(符号、指数、ゼロ判定フラグ、仮数部配列)

typedef struct{
int sign;
int exp;
int zero;
UINT num [101]; }MPA;


(2) 要素関数         index(目次に戻る)

関数名及び型 引数及び型 機能
MPA m_set(a) double a; MPA値設定 double → MPA
MPA m_set_a(s) char *s; 文字列 → MPA
MPA m_set_l(n) long n; long int → MPA
MPA m_int(a) MPA a; 部分抽出 整数部
MPA m_frac(a) MPA a; 小数部
MPA m_round(a, n) MPA a;
int n;
n 桁に丸め
int m_z_chk(a) MPA *a; 0(ゼロ)値の検査
int m_cmp(a, b) MPA a, b; 比較 符号含む
int m_cmp_a(a, b) MPA a, b; 絶対値
int m_cmp_s(a, b) MPA a;
double b;
MPA vs. double
int m_acc(a, b) MPA a, b; 一致する桁数を戻り値とする
MPA m_add(a, b) MPA a, b; 加算 符号含む
MPA m_add_a(a, b) MPA a, b; 絶対値
MPA m_sub(a, b) MPA a, b; 減算 符号含む
MPA m_sub_a(a, b) MPA a, b; 絶対値
int m_prs(a, b) MPA a, *b; 指数部等値変換(|a| < |b|)
void m_add1(a, b) MPA *a, b; インクリメント 通常(単位b)
void m_add1_a(a, b) MPA *a, b; 絶対値(単位b)
void m_sub1(a, b) MPA *a, b; デクリメント 通常(単位b)
void m_sub1_a(a, b) MPA *a, b; 絶対値(単位b)
MPA m_add_ss(m, a, b) int m;
MPA a, b;
加算ルーチン( m 桁目以降対象,スレーブルーチン)
MPA m_sub_ss(m, a, b) int m;
MPA a, b;
減算ルーチン( m 桁目以降対象,スレーブルーチン)
void m_adj(a, n) MPA *a;
int n;
指数部指定変換
MPA m_mul(a, b) MPA a, b; 乗算 a × b
MPA m_mul_s(a, x) MPA a;
int x;
a × x(整数)
void m_mul1(a, b) MPA *a, b; a × b → a
void m_mul1_s(a, x) MPA *a;
int x;
a × x(整数)→ a
MPA m_div(a, b) MPA a, b; 除算 a ÷ b
MPA m_div_s(a, x) MPA a;
int x;
a ÷ x(整数)
void m_div1(a, b) MPA *a, b; a ÷ b → a
void m_div1_s(a, x) MPA *a;
int x;
a ÷ x(整数)→ a
MPA m_idiv(a, b, r) MPA a, b, *r; 戻り値:除算値(整数), r:剰余
int m_mul_ss(m, a, x, b) int m;
MPA a, *b;
UINT x;
整数乗算ルーチン( m 桁目以降対象,スレーブルーチン)
int m_div_ss(m, a, x, b) int m;
MPA a, *b;
UINT x;
整数除算ルーチン( m 桁目以降対象,スレーブルーチン)
MPA m_inv(b) MPA b; 逆数
MPA m_pwr_s(a, x) MPA a;
long x;
整数ベキ乗
MPA m_sqr(a) MPA a; 平方
MPA m_sqrt(a) MPA a; 平方根
void m_print(s, a, _short) char *s;
MPA a;
int _short;
MPA 表示出力 10進表示
void m_printe(s, a, _short) char *s;
MPA a;
int _short;
指数部、仮数部別表示
void m_prt_b(s, a, _short) char *s;
MPA a;
int _short;
要素内容表示
void m_prt_m(s, a, _short) char *s;
MPA a;
int _short;
基数表示
double m_iset(a) MPA a; 型変換 MPA → double
long m_iset_s(a) MPA a; MPA → long
MPA m_exp(x) MPA x; 指数関数
MPA m_log(x) MPA x; 対数関数 自然対数
MPA m_log10(x) MPA x; 常用対数
MPA m_x_y(x, y) MPA x, y; ベキ乗関数 x ^ y
MPA m_10(x) MPA x; 10 ^ x
MPA m_x1n(x, n) MPA x;
long n;
n 乗根
MPA m_hcos(x) MPA x; 双曲線関数 余弦双曲線関数
MPA m_hsin(x) MPA x; 正弦双曲線関数
MPA m_htan(x) MPA x; 正接双曲線関数
MPA m_ahsin(x) MPA x; 逆正弦双曲線関数
MPA m_ahcos(x) MPA x; 逆余弦双曲線関数
MPA m_ahtan(x) MPA x; 逆正接双曲線関数
MPA m_sin(x) MPA x; 三角関数 正弦関数
MPA m_cos(x) MPA x; 余弦関数
MPA m_tan(x) MPA x; 正接関数
MPA m_asin(x) MPA x; 逆正弦関数
MPA m_acos(x) MPA x; 逆余弦関数
MPA m_atan(x) MPA x; 逆正接関数
MPA m_2pi(t1) MPA t1; 角度正規化
MPA m_gcd(a, b) MPA a, b; 整数演算 最大公約数
MPA m_lcm(a, b) MPA a, b; 最小公倍数
MPA m_kaijo(n) UINT n; 階乗
MPA m_bino(m, n) UINT m, n; 2項係数 ( mCn )
MPA m_rand( )   乱数 一様乱数
void m_srand(seed) long seed: 一様乱数初期設定
MPA e( )   定数計算 ネピア定数(e)
MPA pi( )   円周率π
MPA ln2( )   ln 2
MPA ln625( )   ln 0.625
MPA ln75( )   ln 0.75