LAMMP 4.1.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
ele_mul.h 文件参考
#include "../lmmpn.h"
#include "../numth.h"
#include "tmp_alloc.h"
+ ele_mul.h 的引用(Include)关系图:
+ 此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

结构体

struct  fac_t
 
struct  num_heap
 
struct  num_node
 

宏定义

#define INLINE_   static inline
 

类型定义

typedef fac_tfac_ptr
 
typedef const fac_tfac_srcptr
 
typedef struct fac_t fac_t
 
typedef struct num_heap num_heap
 
typedef struct num_node num_node
 
typedef num_nodenum_node_ptr
 

函数

mp_size_t lmmp_elem_mul_ulong_ (mp_ptr dst, const ulongp limbs, mp_size_t n, mp_ptr tp)
 计算limbs数组的累乘积
 
mp_size_t lmmp_factors_mul_ (mp_ptr dst, mp_size_t rn, fac_ptr fac, uint nfactors)
 计算因子的累乘,并将结果放入dst中
 
static void lmmp_num_heap_free_ (num_heap *restrict pq)
 释放优先队列
 
static void lmmp_num_heap_init_ (num_heap *restrict pq, size_t capa)
 初始化优先队列
 
mp_ptr lmmp_num_heap_mul_ (num_heap *pq, mp_size_t *rn)
 将队列中所有元素相乘
 
bool lmmp_num_heap_pop_ (num_heap *pq, num_node_ptr elem)
 出队
 
void lmmp_num_heap_push_ (num_heap *pq, mp_ptr elem, mp_size_t n)
 入队
 

结构体说明

◆ fac_t

struct fac_t

在文件 ele_mul.h117 行定义.

+ fac_t 的协作图:
成员变量
uint f
uint j

◆ num_heap

struct num_heap

在文件 ele_mul.h47 行定义.

+ num_heap 的协作图:
成员变量
size_t cap
num_node_ptr restrict head
size_t size

◆ num_node

struct num_node

在文件 ele_mul.h40 行定义.

+ num_node 的协作图:
成员变量
mp_size_t n
mp_ptr num

宏定义说明

◆ INLINE_

#define INLINE_   static inline

在文件 ele_mul.h27 行定义.

类型定义说明

◆ fac_ptr

typedef fac_t* fac_ptr

在文件 ele_mul.h122 行定义.

◆ fac_srcptr

typedef const fac_t* fac_srcptr

在文件 ele_mul.h123 行定义.

◆ fac_t

typedef struct fac_t fac_t

◆ num_heap

typedef struct num_heap num_heap

◆ num_node

typedef struct num_node num_node

◆ num_node_ptr

在文件 ele_mul.h45 行定义.

函数说明

◆ lmmp_elem_mul_ulong_()

mp_size_t lmmp_elem_mul_ulong_ ( mp_ptr  dst,
const ulongp  limbs,
mp_size_t  n,
mp_ptr  tp 
)

计算limbs数组的累乘积

参数
dst结果指针(长度为 n 个 limb)
limbs数组指针
nlimbs数组长度
tp临时指针(长度为 n 个 limb)
警告
dst!=NULL, limbs!=NULL, n>0, tp!=NULL
返回
结果指针的 limb 长度

被这些函数引用 lmmp_arith_seqprod_(), lmmp_factors_mul_(), lmmp_limb_elem_mul_(), lmmp_odd_nPr_product_(), lmmp_odd_nPr_ulong_(), lmmp_odd_nPr_ushort_(), lmmp_slimb_elem_mul_() , 以及 lmmp_trialdiv_().

+ 这是这个函数的调用关系图:

◆ lmmp_factors_mul_()

mp_size_t lmmp_factors_mul_ ( mp_ptr  dst,
mp_size_t  rn,
fac_ptr  fac,
uint  nfactors 
)

计算因子的累乘,并将结果放入dst中

参数
dst结果数组
rn结果数组的长度
fac因子数组(将会被递归覆盖)
nfactors因子数组的长度
警告
因子必须要小于N,且因子必须要单调递增,且不重复,因子的贡献必须要大于0。 因子数组必须为小因子大指数形式,可以存在大的因子有较大的指数,但整体的趋势必须是小因子大指数。 暂不清楚其最差可以接受至何种形式的因子数组。在组合数以及由阶乘和幂次构成的有理数中,未见不满足 此条件的例子。
返回
结果数组的长度

被这些函数引用 lmmp_odd_multinomial_uint_(), lmmp_odd_multinomial_ushort_(), lmmp_odd_nCr_uint_(), lmmp_odd_nCr_ushort_(), lmmp_odd_nPr_uint_() , 以及 lmmp_odd_nPr_ushort_().

+ 这是这个函数的调用关系图:

◆ lmmp_num_heap_free_()

static void lmmp_num_heap_free_ ( num_heap *restrict  pq)
inlinestatic

释放优先队列

参数
pq优先队列指针

在文件 ele_mul.h72 行定义.

72 {
73 lmmp_debug_assert(pq->size == 0);
74 lmmp_free(pq->head);
75 pq->cap = 0;
76 pq->size = 0;
77 pq->head = NULL;
78}
size_t size
Definition ele_mul.h:49
num_node_ptr restrict head
Definition ele_mul.h:48
size_t cap
Definition ele_mul.h:50
#define lmmp_debug_assert(x)
Definition lmmp.h:387
void lmmp_free(void *ptr)
内存释放函数(调用lmmp_heap_free_fn)
Definition memory.c:204

引用了 lmmp_debug_assert , 以及 lmmp_free().

被这些函数引用 lmmp_vec_elem_mul_().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ lmmp_num_heap_init_()

static void lmmp_num_heap_init_ ( num_heap *restrict  pq,
size_t  capa 
)
inlinestatic

初始化优先队列

参数
pq优先队列指针
capa优先队列容量

在文件 ele_mul.h58 行定义.

58 {
59 pq->head = ALLOC_TYPE(capa, num_node);
60 for (size_t i = 0; i < capa; ++i) {
61 pq->head[i].num = NULL;
62 pq->head[i].n = 0;
63 }
64 pq->cap = capa;
65 pq->size = 0;
66}
mp_size_t n
Definition ele_mul.h:42
mp_ptr num
Definition ele_mul.h:41
#define ALLOC_TYPE(n, type)
Definition tmp_alloc.h:112

引用了 ALLOC_TYPE , 以及 num_heap::head.

被这些函数引用 lmmp_vec_elem_mul_().

+ 这是这个函数的调用关系图:

◆ lmmp_num_heap_mul_()

mp_ptr lmmp_num_heap_mul_ ( num_heap pq,
mp_size_t rn 
)

将队列中所有元素相乘

参数
pq优先队列指针
rn结果指针的 limb 长度
警告
队列非空,pq!=NULL
注解
返回的指针必须手动释放,原队列中的元素指针都将被释放
返回
结果指针

被这些函数引用 lmmp_vec_elem_mul_().

+ 这是这个函数的调用关系图:

◆ lmmp_num_heap_pop_()

bool lmmp_num_heap_pop_ ( num_heap pq,
num_node_ptr  elem 
)

出队

参数
pq优先队列指针
elem出队的元素指针
返回
若队列为空,返回 false,否则返回 true

◆ lmmp_num_heap_push_()

void lmmp_num_heap_push_ ( num_heap pq,
mp_ptr  elem,
mp_size_t  n 
)

入队

参数
pq优先队列指针
elem待入队的元素指针
n元素的 limb 长度

被这些函数引用 lmmp_vec_elem_mul_().

+ 这是这个函数的调用关系图: