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

misc.c

解説を見る。
00001 #include "multiprec.h"
00002 
00017 size_t
00018 ymp_abs_clog2(const digit_t *digits, size_t len)
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 }
00044 
00045 
00052 size_t ymp_ilog2(mp_cref_t self)
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 }
00071 

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