メインページ   モジュール   データ構造   ファイル一覧   データフィールド   グローバル  

multiprec.h の解説

#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <stdarg.h>
#include <stdint.h>

ソースコードを見る。

データ構造

struct  multiprec
 多倍長整数を表す構造体. より詳しく...


マクロ定義

#define DIGIT_BIT   (sizeof(digit_t)*CHAR_BIT)
 digit_tのビット数. より詳しく...

#define DIGIT_MAX   UINT_MAX
 digit_tに格納できる最大値. より詳しく...

#define DIGIT_HIGHEST_BIT   ((digit_t)(1<<(DIGIT_BIT-1)))
#define DOUBLE_DIGIT_BIT   (sizeof(double_digit_t)*CHAR_BIT)
 double_digit_tのビット数. より詳しく...

#define DOUBLE_DIGIT_MAX   ULONGLONG_MAX
 double_digit_tに格納できる最大値. より詳しく...

#define HIGH_DIGIT(dd)   ((digit_t)((dd) >> DIGIT_BIT))
 double_digit_tの上位部分のdigit_tを返す. より詳しく...

#define LOW_DIGIT(dd)   ((digit_t)(dd))
 double_digit_tの下位部分のdigit_tを返す. より詳しく...

#define LOW_DIGIT_TO_HIGH_DIGIT(dd)   ((dd) << DIGIT_BIT)
 double_digit_tの下位部分を上位に移し、下位を0で埋める. より詳しく...

#define MULTIPREC_RADIX   (((double_digit_t)DIGIT_MAX)+1)
 多倍長整数の桁の基数. より詳しく...

#define MULTIPREC_INITIALIZER   {positive_sign, 0, 0, NULL}
 struct multiprecの標準的な初期化指定子. より詳しく...

#define MAX(a, b)   ( ((a)>(b))?(a):(b) )
#define UINT_IS_2POW(u)   ( ((u) & ((u)-1)) == 0 )
 符号無し固定長整数が2の冪かどうかを判定. より詳しく...

#define YMP_ALLOCATE(result, type, count)
 動的メモリーを新規に確保. より詳しく...

#define YMP_REALLOCATE(ptr, type, count)
 動的メモリーを再確保. より詳しく...

#define YMP_FREE(ptr)   ymp_free(ptr)
 動的メモリーを解放. より詳しく...

#define YMP_TEMP_ALLOCATE(result, type, count)
 関数ローカルな動的メモリーを新規に確保. より詳しく...

#define YMP_ALLOC_DIGITS(self, new_len)
 new_len要素のdigit_tの列を確保して、先頭ポインタを self->digitsに設定. より詳しく...

#define YMP_REALLOC_DIGITS(self, new_len)
 new_len要素のdigit_tの列を再確保して、先頭ポインタを self->digitsに設定. より詳しく...

#define YMP_FREE_DIGITS(self)
 self->digitsを解放. より詳しく...

#define ymp_alloca_initialize(self, new_len)
 多倍長整数を、`alloca()により'一定のdigit列を確保した状態で初期化し、0を代入. より詳しく...

#define ymp_assign_zero(self)   (void)((self)->used = 0)
 多倍長整数に0を代入. より詳しく...

#define ymp_div(quotient, self, other)   ymp_divmod((quotient), NULL, (self), (other))
 多倍長整数の整除. より詳しく...

#define ymp_mod(remainder, self, other)   ymp_divmod(NULL, (remainder), (self), (other))
 多倍長整数の剰余計算. より詳しく...

#define ymp_div_digit(quotient, self, other)   (void)ymp_divmod_digit((quotient), (self), (other))
 多倍長整数のdigit_tによる整除. より詳しく...

#define ymp_mod_digit(self, other)   ymp_divmod_digit(NULL, (self), (other))
 多倍長整数のdigit_tによる剰余計算. より詳しく...

#define ymp_is_divisible(self, other)   ymp_div_if_divisible(NULL, (self), (other))
 多倍長整数が割り切れるかを判定. より詳しく...

#define ymp_is_divisible_digit(self, other)   ymp_div_if_divisible_digit(NULL, (self), (other))
 多倍長整数がdigit_tで割り切れるかを判定. より詳しく...

#define ymp_is_odd(self)   !ymp_is_even((self))
 多倍長整数が奇数かどうかを判定. より詳しく...


型定義

typedef unsigned digit_t
 多倍長整数の各桁を表す整数型. より詳しく...

typedef unsigned long long double_digit_t
 digit_tの2倍以上のビット数を持つ整数型. より詳しく...

typedef multiprecmp_ref_t
 struct multiprecヘの参照(ポインタ). より詳しく...

typedef const struct multiprecmp_cref_t
 struct multiprecヘのconst参照(constポインタ). より詳しく...


列挙型

enum  mp_sign_t { positive_sign = 0, negative_sign = 1 }
 多倍長整数の符号. より詳しく...


関数

size_t digit_len_to_str_len (size_t len, digit_t r)
 多倍長整数の対数を概算. より詳しく...

void ymp_initialize (mp_ref_t self)
 多倍長整数を標準初期化指定子の値で初期化. より詳しく...

void ymp_destroy (mp_ref_t self)
 多倍長整数を破棄し、digit列を解放する。. より詳しく...

void ymp_reinitialize (mp_ref_t self)
 初期化済の多倍長整数を再び初期状態にする。. より詳しく...

void ymp_initialize_by_mp (mp_ref_t self, mp_cref_t other)
 ディープコピーにより多倍長整数を初期化. より詳しく...

void ymp_reserve_and_initialize_by_digit (mp_ref_t self, size_t len, digit_t d)
 多倍長整数を、一定のdigit列を確保した状態で初期化し、digit_tを代入. より詳しく...

void ymp_reserve_and_initialize (mp_ref_t self, size_t len)
 多倍長整数を、一定のdigit列を確保した状態で初期化し、0を代入. より詳しく...

void ymp_initialize_by_array (mp_ref_t self, size_t len, const digit_t *array)
 多倍長整数をdigit_tの列により初期化. より詳しく...

void ymp_initialize_by_digit (mp_ref_t self, digit_t d)
 多倍長整数を、digit_tを代入して初期化. より詳しく...

void ymp_initialize_by_string (mp_ref_t self, const char *text, char **endptr, unsigned radix)
 文字列形式で表された整数値でstruct multiprecを初期化. より詳しく...

void ymp_initialize_by_char (mp_ref_t self, signed char val)
 多倍長整数に signed char 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_short (mp_ref_t self, short val)
 多倍長整数に short 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_int (mp_ref_t self, int val)
 多倍長整数に int 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_long (mp_ref_t self, long val)
 多倍長整数に long 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_uchar (mp_ref_t self, unsigned char val)
 多倍長整数に unsigned char 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_ushort (mp_ref_t self, unsigned short val)
 多倍長整数に unsigned short 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_uint (mp_ref_t self, unsigned val)
 多倍長整数に unsigned int 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_ulong (mp_ref_t self, unsigned long val)
 多倍長整数に unsigned long 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_intmax (mp_ref_t self, intmax_t val)
 多倍長整数に intmax_t 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_uintmax (mp_ref_t self, uintmax_t val)
 多倍長整数に uintmax_t 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_double (mp_ref_t self, double val)
 多倍長整数にdouble型から値を代入して初期化. より詳しく...

mp_ref_t ymp_dup (mp_cref_t orig)
 ディープコピーにより多倍長整数を新規に生成. より詳しく...

void ymp_reserve (mp_ref_t self, size_t len)
 多倍長整数が、少なくとも len 個からなるdigit列を持つことを保証する. より詳しく...

void ymp_cut_down (mp_ref_t self)
 多倍長整数が保持している余分なdigitを(可能なら)解放する。. より詳しく...

void ymp_assign_abs (mp_ref_t self, mp_cref_t other)
 多倍長整数の絶対値をディープコピーにより代入. より詳しく...

void ymp_assign_abs_digit (mp_ref_t self, digit_t other)
 多倍長整数の絶対値をdigit_tから代入. より詳しく...

void ymp_assign_abs_array (mp_ref_t self, size_t len, const digit_t *array)
 多倍長整数にdigit_tの列から絶対値を代入. より詳しく...

void ymp_assign (mp_ref_t self, mp_cref_t other)
 多倍長整数の値をディープコピーにより代入. より詳しく...

void ymp_assign_digit (mp_ref_t self, digit_t other)
 多倍長整数の値をdigit_tから代入. より詳しく...

void ymp_assign_array (mp_ref_t self, size_t len, const digit_t *array)
 多倍長整数にdigit_tの列から代入. より詳しく...

void ymp_assign_string (mp_ref_t self, const char *text, char **endptr, unsigned radix)
 文字列形式で表された整数値をstruct multiprecに代入. より詳しく...

void ymp_assign_char (mp_ref_t self, signed char val)
 多倍長整数に signed char 型から値を代入. より詳しく...

void ymp_assign_short (mp_ref_t self, short val)
 多倍長整数に short 型から値を代入. より詳しく...

void ymp_assign_int (mp_ref_t self, int val)
 多倍長整数に int 型から値を代入. より詳しく...

void ymp_assign_long (mp_ref_t self, long val)
 多倍長整数に long 型から値を代入. より詳しく...

void ymp_assign_uchar (mp_ref_t self, unsigned char val)
 多倍長整数に unsigned char 型から値を代入. より詳しく...

void ymp_assign_ushort (mp_ref_t self, unsigned short val)
 多倍長整数に unsigned short 型から値を代入. より詳しく...

void ymp_assign_uint (mp_ref_t self, unsigned val)
 多倍長整数に unsigned int 型から値を代入. より詳しく...

void ymp_assign_ulong (mp_ref_t self, unsigned long val)
 多倍長整数に unsigned long 型から値を代入. より詳しく...

void ymp_assign_intmax (mp_ref_t self, intmax_t val)
 多倍長整数に intmax_t 型から値を代入. より詳しく...

void ymp_assign_uintmax (mp_ref_t self, uintmax_t val)
 多倍長整数に uintmax_t 型から値を代入. より詳しく...

void ymp_assign_double (mp_ref_t self, double val)
 多倍長整数にdouble型から値を代入. より詳しく...

void ymp_assign_2exp (mp_ref_t self, size_t pow)
 多倍長整数に2の冪を代入. より詳しく...

void ymp_swap (mp_ref_t self, mp_ref_t other)
 多倍長整数の値を交換. より詳しく...

size_t ymp_rshiftabs (digit_t *result, const digit_t *source, size_t len, size_t width)
 多倍長の自然数に対し、右に向かってビットシフトを行なう。. より詳しく...

size_t ymp_lshiftabs (digit_t *result, const digit_t *source, size_t len, size_t width)
 多倍長の自然数に対し、左に向かってビットシフトを行なう。. より詳しく...

size_t ymp_addabs (digit_t *result, const digit_t *lhs, const digit_t *rhs, size_t lhs_len, size_t rhs_len)
 digit_tの列で表されている絶対値の和を求める. より詳しく...

size_t ymp_subabs (digit_t *result, const digit_t *lhs, const digit_t *rhs, size_t lhs_len, size_t rhs_len)
 digit_tの列で表されている絶対値の差を求める. より詳しく...

size_t ymp_mulabs (digit_t *result, const digit_t *lhs, const digit_t *rhs, size_t lhs_len, size_t rhs_len)
 digit_tの列で表されている絶対値の積を求める. より詳しく...

size_t ymp_mulabs_digit (digit_t *result, const digit_t *lhs, digit_t rhs, size_t lhs_len)
 digit_tの列で表されている絶対値にdigit_tを掛ける. より詳しく...

size_t ymp_modmulabs (digit_t *result, const digit_t *lhs, const digit_t *rhs, const digit_t *modulus, size_t lhs_len, size_t rhs_len, size_t modulus_len)
 多倍長自然数の積の剰余を求める. より詳しく...

size_t ymp_modmulabs_2exp (digit_t *result, const digit_t *lhs, const digit_t *rhs, size_t pow, size_t lhs_len, size_t rhs_len)
 多倍長自然数の積の、2の冪による剰余を求める. より詳しく...

size_t ymp_modabs_2exp (digit_t *result, const digit_t *self, size_t len, size_t pow)
 多倍長自然数の2の冪乗による剰余. より詳しく...

size_t ymp_divmodabs (digit_t *quotient, digit_t *remainder, const digit_t *lhs, const digit_t *rhs, size_t lhs_len, size_t rhs_len)
 多倍長自然数の除算. より詳しく...

digit_t ymp_divmodabs_digit (digit_t *quotient, const digit_t *lhs, digit_t rhs, size_t lhs_len)
 多倍長の自然数をdigit_tで割る. より詳しく...

size_t ymp_modpowabs (digit_t *result, const digit_t *source, const digit_t *modulus, const digit_t *pow, size_t source_len, size_t modulus_len, size_t pow_len)
 多倍長自然数の冪の剰余を求める(冪指数は多倍長). より詳しく...

size_t ymp_modpowabs_z (digit_t *result, const digit_t *source, const digit_t *modulus, size_t source_len, size_t modulus_len, size_t pow)
 多倍長自然数の冪の剰余を求める(冪指数はsize_t). より詳しく...

size_t ymp_modpowabs_2exp_z (digit_t *result, const digit_t *source, size_t len, size_t emod, size_t pow)
 多倍長の自然数の冪の、2の冪による剰余を求める(冪指数はsize_t). より詳しく...

size_t ymp_powabs (digit_t *result, const digit_t *source, size_t source_len, size_t pow)
 多倍長自然数の冪 (冪指数はsize_t). より詳しく...

void ymp_neg (mp_ref_t result, mp_cref_t orig)
 多倍長整数の符号反転. より詳しく...

void ymp_add (mp_ref_t result, mp_cref_t self, mp_cref_t other)
 多倍長整数の加算. より詳しく...

void ymp_sub (mp_ref_t result, mp_cref_t self, mp_cref_t other)
 多倍長整数の減算. より詳しく...

void ymp_add_digit (mp_ref_t result, mp_cref_t self, digit_t other)
 多倍長整数にdigit_tを足す. より詳しく...

void ymp_sub_digit (mp_ref_t result, mp_cref_t self, digit_t other)
 多倍長整数からdigit_tを引く. より詳しく...

void ymp_mul (mp_ref_t result, mp_cref_t self, mp_cref_t other)
 多倍長整数同士を掛ける. より詳しく...

void ymp_mul_digit (mp_ref_t result, mp_cref_t self, digit_t other)
 多倍長整数にdigit_tを掛ける. より詳しく...

void ymp_modmul (mp_ref_t result, mp_cref_t self, mp_cref_t other, mp_cref_t modulus)
 多倍長整数の積の剰余を求める. より詳しく...

void ymp_modmul_2exp (mp_ref_t result, mp_cref_t self, mp_cref_t other, size_t pow)
 多倍長自然数の積の、2の冪による剰余を求める. より詳しく...

void ymp_mul_2exp (mp_ref_t result, mp_cref_t self, size_t pow)
 多倍長整数を2の冪乗倍する. より詳しく...

void ymp_div_2exp (mp_ref_t result, mp_cref_t self, size_t pow)
 多倍長整数を2の冪乗で割る. より詳しく...

void ymp_mod_2exp (mp_ref_t result, mp_cref_t self, size_t pow)
 多倍長整数を2の冪乗で割った剰余. より詳しく...

void ymp_divmod (mp_ref_t quotient, mp_ref_t remainder, mp_cref_t self, mp_cref_t other)
 多倍長整数の除算. より詳しく...

digit_t ymp_divmod_digit (mp_ref_t quotient, mp_cref_t self, digit_t other)
 多倍長整数の、digit_tによる除算. より詳しく...

int ymp_div_if_divisible (mp_ref_t quotient, mp_cref_t self, mp_cref_t other)
 多倍長整数を、もし可能なら割る. より詳しく...

int ymp_div_if_divisible_digit (mp_ref_t quotient, mp_cref_t self, digit_t other)
 多倍長整数をdigit_tで、もし可能なら割る. より詳しく...

void ymp_pow (mp_ref_t result, mp_cref_t self, size_t pow)
 多倍長整数の冪 (冪指数はsize_t). より詳しく...

void ymp_modpow (mp_ref_t result, mp_cref_t self, mp_cref_t modulus, mp_cref_t pow)
 多倍長整数の冪の剰余を求める(冪指数は多倍長). より詳しく...

void ymp_modpow_z (mp_ref_t result, mp_cref_t self, mp_cref_t modulus, size_t pow)
 多倍長整数の冪の剰余を求める(冪指数はsize_t). より詳しく...

void ymp_modpow_2exp_z (mp_ref_t result, mp_cref_t self, size_t emod, size_t pow)
 多倍長整数の冪の、2の冪による剰余を求める(冪指数はsize_t). より詳しく...

void ymp_iroot (mp_ref_t result, mp_cref_t self, size_t pow)
 多倍長整数の冪乗根の整数部分. より詳しく...

void ymp_euclid (mp_ref_t g, mp_cref_t a, mp_cref_t b)
 多倍長整数の最小公倍数を計算. より詳しく...

void ymp_euclid_ex (mp_ref_t g, mp_ref_t s, mp_ref_t t, mp_cref_t a, mp_cref_t b)
 拡張Euclid互除法を行なう. より詳しく...

void ymp_multi_euclid (mp_ref_t result, size_t len, const struct multiprec *ary)
int ymp_modinv (mp_ref_t result, mp_cref_t self, mp_cref_t modulus)
 剰余環Z/rZ上の逆元. より詳しく...

int ymp_binary_sunzi (mp_ref_t result, const mp_cref_t remainders[2], const mp_cref_t moduli[2])
 孫子(中国)の剰余定理の解を求める. より詳しく...

int ymp_proot (mp_ref_t result, mp_cref_t self, size_t pow)
 Perfect powerの冪根を求める. より詳しく...

int ymp_is_perfect_power (mp_cref_t self)
 Perfect powerかどうかを判定. より詳しく...

void ymp_dump (FILE *fp, mp_cref_t mz)
 多倍長整数の内部状態をダンプ. より詳しく...

int ymp_print_hex (FILE *fp, mp_cref_t mz)
 多倍長整数を16進表記で簡易出力. より詳しく...

int ymp_snprint (char *buf, size_t len, mp_cref_t mz, digit_t radix)
 多倍長整数をr進表記で文字列に出力. より詳しく...

int ymp_fprint (FILE *fp, mp_cref_t mz, digit_t radix)
 多倍長整数をr進表記でファイルに出力. より詳しく...

int ymp_compare_abs (mp_cref_t lhs, mp_cref_t rhs)
 多倍長整数の絶対値同士を大小比較する. より詳しく...

int ymp_compare (mp_cref_t lhs, mp_cref_t rhs)
 多倍長整数同士を大小比較する. より詳しく...

int ymp_compare_digit (mp_cref_t lhs, digit_t rhs)
 多倍長整数とdigit_tを大小比較する. より詳しく...

int ymp_is_zero (mp_cref_t self)
 多倍長整数が0かどうかを判定. より詳しく...

int ymp_is_even (mp_cref_t self)
 多倍長整数が偶数かどうかを判定. より詳しく...

size_t ymp_ilog2 (mp_cref_t self)
 int( log_2 |n| ). より詳しく...

size_t ymp_abs_clog2 (const digit_t *digits, size_t len)
 ceil ( log_2 |n| ). より詳しく...


変数

void *(* ymp_malloc )(size_t size)
 動的メモリー確保. より詳しく...

void *(* ymp_realloc )(void *pv_mem, size_t size)
 動的メモリー再配置. より詳しく...

void(* ymp_free )(void *pv_mem)
 メモリー解放. より詳しく...

void(* ymp_warning )(const char *format,...)
 警告レベルのメッセージを出力するための関数へのポインタ. より詳しく...

void(* ymp_error )(const char *format,...)
 エラーメッセージを出力するための関数へのポインタ. より詳しく...

void(* ymp_fatal )(const char *format,...)
 致命的エラーを処理するための関数へのポインタ. より詳しく...

void(* ymp_alloc_error )(const char *psz_msg, size_t size)
 メモリー確保の失敗を捕捉する関数へのポインタ. より詳しく...


YMPに対してTue Mar 16 19:23:51 2004に生成されました。 doxygen1.2.14 作者 Dimitri van Heesch, © 1997-2002