LAMMP
4.1.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
extract_bits.c
浏览该文件的文档.
1
/*
2
* LAMMP - Copyright (C) 2025-2026 HJimmyK(Jericho Knox)
3
* This file is part of lammp, under the GNU LGPL v2 license.
4
* See LICENSE in the project root for the full license text.
5
*/
6
7
#include "../../include/lammp/lmmpn.h"
8
9
mp_bitcnt_t
lmmp_extract_bits_
(
mp_srcptr
restrict num,
mp_size_t
n,
mp_limb_t
* restrict ext,
int
bits) {
10
lmmp_param_assert
(bits <= LIMB_BITS && bits > 0);
11
lmmp_param_assert
(n > 0);
12
if
(n == 1) {
13
int
lb =
lmmp_limb_bits_
(num[0]);
14
if
(lb <= bits) {
15
*ext = num[0];
16
return
0;
17
}
else
{
18
*ext = num[0] >> (lb - bits);
19
return
lb - bits;
20
}
21
}
else
{
22
int
lb =
lmmp_limb_bits_
(num[n - 1]);
23
if
(lb < bits) {
24
*ext = num[n - 1] << (bits - lb);
25
*ext |= num[n - 2] >> (
LIMB_BITS
- bits + lb);
26
return
LIMB_BITS
* (n - 1) - (bits - lb);
27
}
else
if
(lb == bits) {
28
*ext = num[n - 1];
29
return
LIMB_BITS
* (n - 1);
30
}
else
{
31
*ext = num[n - 1] >> (lb - bits);
32
return
LIMB_BITS
* (n - 1) + (lb - bits);
33
}
34
}
35
}
lmmp_extract_bits_
mp_bitcnt_t lmmp_extract_bits_(mp_srcptr restrict num, mp_size_t n, mp_limb_t *restrict ext, int bits)
Definition
extract_bits.c:9
mp_bitcnt_t
size_t mp_bitcnt_t
Definition
lmmp.h:217
mp_size_t
uint64_t mp_size_t
Definition
lmmp.h:212
mp_srcptr
const mp_limb_t * mp_srcptr
Definition
lmmp.h:216
mp_limb_t
uint64_t mp_limb_t
Definition
lmmp.h:211
LIMB_BITS
#define LIMB_BITS
Definition
lmmp.h:221
lmmp_param_assert
#define lmmp_param_assert(x)
Definition
lmmp.h:398
lmmp_limb_bits_
int lmmp_limb_bits_(mp_limb_t x)
计算满足 2^k > x 的最小自然数k
Definition
tiny.c:11
src
lammp
extract_bits.c
生成于 2026年 五月 24日 星期日 18:55:00 , 为 LAMMP使用
1.9.8