7#include "../../../include/lammp/impl/ele_mul.h"
8#include "../../../include/lammp/impl/mparam.h"
9#include "../../../include/lammp/lmmpn.h"
10#include "../../../include/lammp/matrix.h"
12#define COPY(tp, src, n) \
13 tp = ALLOC_TYPE(n, mp_limb_t); \
16#define POP_THRESHOLD 5
33 for (
size_t i = 0; i < vec->
n; ++i) {
34 if (vec->
num[i] == NULL || vec->
len[i] == 0) {
37 }
else if (vec->
len[i] < 0) {
51 mpn -= mp2[mpn - 1] == 0 ? 1 : 0;
59 mpn -= mp1[mpn - 1] == 0 ? 1 : 0;
78 if (!(mpn == 1 && mp1[0] == 1))
84 if (!(mpn == 1 && mp2[0] == 1))
94 return sign ? mpn : -mpn;
118 limbs[i] = -slimb[i];
129 return sign ? n : -n;
void lmmp_num_heap_push_(num_heap *pq, mp_ptr elem, mp_size_t n)
入队
mp_size_t lmmp_elem_mul_ulong_(mp_ptr dst, const ulongp limbs, mp_size_t n, mp_ptr tp)
计算limbs数组的累乘积
static void lmmp_num_heap_init_(num_heap *restrict pq, size_t capa)
初始化优先队列
static void lmmp_num_heap_free_(num_heap *restrict pq)
释放优先队列
mp_ptr lmmp_num_heap_mul_(num_heap *pq, mp_size_t *rn)
将队列中所有元素相乘
mp_size_t lmmp_limb_elem_mul_(mp_ptr *dst, const mp_limb_t *restrict limb, mp_size_t n)
mp_ssize_t lmmp_slimb_elem_mul_(mp_ptr *dst, const mp_slimb_t *restrict slimb, mp_size_t n)
mp_ssize_t lmmp_vec_elem_mul_(mp_ptr *dst, const lmmp_vecn_t *vec)
计算向量的累乘
#define lmmp_debug_assert(x)
void lmmp_free(void *ptr)
内存释放函数(调用lmmp_heap_free_fn)
#define lmmp_param_assert(x)
void lmmp_mul_basecase_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
基础乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
#define VEC_ELEMMUL_MP_THRESHOLD
#define ALLOC_TYPE(n, type)
#define TALLOC_TYPE(n, type)