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

比較関数
[多倍長整数]


マクロ定義

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


関数

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)
 多倍長整数が偶数かどうかを判定. より詳しく...


マクロ定義の解説

#define ymp_is_odd self       !ymp_is_even((self))
 

多倍長整数が奇数かどうかを判定.

引数:
self  判定するstruct multiprecへのポインタ
戻り値:
多倍長整数値が奇数なら、非0を返す. 偶数なら0を返す

multiprec.h590 行で定義されています。


関数の解説

int ymp_compare_abs mp_cref_t    lhs,
mp_cref_t    rhs
[inline]
 

多倍長整数の絶対値同士を大小比較する.

引数:
lhs  判定するstruct multiprecへのポインタ
rhs  判定するstruct multiprecへのポインタ
戻り値:
1  |<lhs>|の方が大きい
0  |<lhs>|と|<rhs>|は等しい
-1  |<rhs>|の方が大きい

compare.c21 行で定義されています。

参照 mp_cref_t.

00022 {
00023   if (lhs->used > rhs->used)
00024     {
00025       return 1;
00026     }
00027   else if (lhs->used < rhs->used)
00028     {
00029       return -1;
00030     }
00031   else
00032     {
00033       size_t i;
00034       for (i=lhs->used; i-- > 0; )
00035         {
00036           if (lhs->digits[i] > rhs->digits[i]) return 1;
00037           else if (lhs->digits[i] < rhs->digits[i]) return -1;
00038         }
00039     }
00040   return 0;
00041 }

int ymp_compare mp_cref_t    lhs,
mp_cref_t    rhs
 

多倍長整数同士を大小比較する.

引数:
lhs  判定するstruct multiprecへのポインタ
rhs  判定するstruct multiprecへのポインタ
戻り値:
1  <lhs>の方が大きい
0  <lhs>と<rhs>は等しい
-1  <rhs>の方が大きい

compare.c54 行で定義されています。

参照 mp_cref_t, と ymp_compare_abs.

00055 {
00056   if (lhs->sign != rhs->sign)
00057     return rhs->sign - lhs->sign;
00058   else if (lhs->sign)
00059     return ymp_compare_abs(rhs, lhs);
00060   else
00061     return ymp_compare_abs(lhs, rhs);
00062 }

int ymp_compare_digit mp_cref_t    lhs,
digit_t    rhs
 

多倍長整数とdigit_tを大小比較する.

引数:
lhs  判定するstruct multiprecへのポインタ
rhs  判定するdigit_t
戻り値:
1  <lhs>の方が大きい
0  <lhs>と<rhs>は等しい
-1  <rhs>の方が大きい

compare.c74 行で定義されています。

参照 digit_t, と mp_cref_t.

00075 {
00076   if (lhs->sign) return -1;
00077 
00078   if (lhs->used > 1) return 1;
00079   else if (lhs->used == 1)
00080     {
00081       if (lhs->digits[0] > rhs) return 1;
00082       else if (lhs->digits[0] < rhs) return -1;
00083       else return 0;
00084     }
00085   else return -(rhs!=0);
00086 }

int ymp_is_zero mp_cref_t    self
 

多倍長整数が0かどうかを判定.

引数:
self  判定するstruct multiprecへのポインタ
戻り値:
多倍長整数値が0であるなら、非0を返す. そうでないなら0を返す

compare.c95 行で定義されています。

参照 mp_cref_t.

00096 {
00097   return !self || !self->used || (self->used==1 && !self->digits[0]);
00098 }

int ymp_is_even mp_cref_t    self
 

多倍長整数が偶数かどうかを判定.

引数:
self  判定するstruct multiprecへのポインタ
戻り値:
多倍長整数値が偶数なら、非0を返す. 奇数なら0を返す

compare.c106 行で定義されています。

参照 mp_cref_t.

00107 {
00108   return !self || !self->used || !(self->digits[0] & 0x01);
00109 }


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