[ 簡単な説明 ]
本ライブラリ中で使用する標準ライブラリヘッダのインクルード、マクロ変数の定義、構造体等の定義を行うサブ・ヘッダー。 本ライブラリでサポートする多倍長の桁数は、NMPA、NMPA1、NMPA2、MMPA の定数で決定する。 NMPA は、仮数部の int 型配列要素数である。 NMPA1、NMPA2、MMPA はコメントで示す計算式に従って定義する。(間違った値を指定したときの動作は保証できない。) int 型 を基本とするため、基数が 32768 であり、従って、10進表示での有効桁数は、NMPA × log10(32768) となる。 現ライブラリは、NMPA = 100 としているので、10進表示での有効桁数は、451桁となる。 RADIXBITS 以下の定数は変更してはならない。 また、unsigned int 及び unsigned long を、タイピング量低減のため、UINT 及び ULONG という型に再定義している。 |
/* mpa_d.h */ #ifdef _MPA #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <time.h> #include <values.h> /* NMPA1 = NMPA + 1 NMPA2 = NMPA1 * 2 MMPA = NMPA1 * log10(RADIX) / 4 */ #define NMPA 100 #define NMPA1 101 #define NMPA2 202 #define MMPA 114 #define RADIXBITS 15 #define RADIX 0x8000 /* = 2 ^ RADIXBITS */ #define RADIX1 0x7fff /* = RADIX - 1 */ #define RADIX_2 16384 /* = RADIX / 2 */ #define RADIX2 1073741824L /* = RADIX ^ 2 */ #define MAXEXP 16383 #define MINEXP -16384 #define MAX_LONG 0x7FFFFFFFL #define MIN_LONG 0x80000000L #define MAX_K 180 /* < (sqrt(4 * RADIX + 1) - 1) * 0.5 */ typedef unsigned int UINT; typedef unsigned long ULONG; typedef struct { int sign; int exp; int zero; UINT num[NMPA1]; } MPA; #endif |