関数 | |
| 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| ). より詳しく... | |
|
||||||||||||
|
ceil ( log_2 |n| ).
参照 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 }
|
|
|
int( log_2 |n| ).
参照 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 }
|
1.2.14 作者 Dimitri van Heesch,
© 1997-2002