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

その他諸々
[多倍長整数]


関数

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

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| ).

引数:
digits  真数を表すdigit_tの列の先頭へのポインタ
len  digitsがポイントする領域の長さ(要素数)
戻り値:
<self>の底2の対数の天井関数。ただし、<self>が0のときは0が返る。

misc.c18 行で定義されています。

参照 DIGIT_BIT, DIGIT_HIGHEST_BIT, digit_t, と UINT_IS_2POW.

00019 {
00020   digit_t bit_mask, hd;
00021   size_t ret, i;
00022 
00023   if (len==0 || (len==1 && digits[0]==0)) return 0;
00024 
00025   ret = len * DIGIT_BIT - 1;
00026 
00027   hd = digits[len-1]; bit_mask = DIGIT_HIGHEST_BIT;
00028   while (!(bit_mask & hd))
00029     {
00030       bit_mask >>= 1;
00031       --ret; 
00032     }
00033   
00034   if (!UINT_IS_2POW(hd)) return ++ret;
00035 
00036   i = len - 1;
00037   while (i-- > 0)
00038     {
00039       if (digits[i] != 0) ++ret;
00040     }
00041 
00042   return ret;  
00043 }

size_t ymp_ilog2 mp_cref_t    self
 

int( log_2 |n| ).

引数:
self  真数を表すstruct multiprecへのポインタ
戻り値:
<self>の底2の対数の整数部分。ただし、<self>が0のときは0が返る。

misc.c52 行で定義されています。

参照 DIGIT_BIT, DIGIT_HIGHEST_BIT, digit_t, mp_cref_t, と ymp_is_zero.

00053 {
00054   digit_t bit_mask;
00055   size_t ret;
00056   digit_t hd;
00057 
00058   if (ymp_is_zero(self)) return 0;
00059 
00060   ret = self->used * DIGIT_BIT-1; 
00061   hd = self->digits[self->used-1];
00062   bit_mask = DIGIT_HIGHEST_BIT;
00063   while (!(bit_mask & hd))
00064     {
00065       bit_mask >>= 1;
00066       --ret; 
00067     }
00068 
00069   return ret;
00070 }


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