LAMMP 4.2.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  huff_node
 Copyright (C) 2026 HJimmyK(Jericho Knox) 更多...
 
struct  huff_tree
 

类型定义

typedef fac_tfac_ptr
 
typedef struct fac_t fac_t
 

函数

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中
 
mp_size_t lmmp_factors_mul_ushort_ (mp_ptr dst, mp_size_t rn, fac_ptr fac, ushort nfactors)
 计算因子的累乘,并将结果放入dst中
 
sint lmmp_huff_tree_build_ (huff_tree *ht)
 构建哈夫曼乘法树
 
static void lmmp_huff_tree_free_ (huff_tree *ht)
 释放哈夫曼树
 
static void lmmp_huff_tree_init_ (huff_tree *ht, sint cap)
 初始化哈夫曼乘法树
 
mp_size_t lmmp_huff_tree_mul_ (huff_tree *ht, sint ridx, mp_ptr dst, mp_ptr tp)
 将哈夫曼树中所有元素相乘
 
static void lmmp_huff_tree_push_ (huff_tree *ht, mp_srcptr np, mp_size_t nn)
 入队哈夫曼树
 

结构体说明

◆ fac_t

struct fac_t

在文件 ele_mul.h116 行定义.

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

◆ huff_node

struct huff_node

Copyright (C) 2026 HJimmyK(Jericho Knox)

This file is part of LAMMP.

LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This program is distributed WITHOUT ANY WARRANTY.

See https://www.gnu.org/licenses/.

在文件 ele_mul.h24 行定义.

+ huff_node 的协作图:
成员变量
sint left
mp_size_t nn
mp_srcptr np
sint right

◆ huff_tree

struct huff_tree

在文件 ele_mul.h31 行定义.

+ huff_tree 的协作图:
成员变量
sint cap
huff_node * root
sint size

类型定义说明

◆ fac_ptr

在文件 ele_mul.h121 行定义.

◆ fac_t

函数说明

◆ 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_factors_mul_ushort_(), lmmp_odd_nPr_product_(), lmmp_odd_nPr_product_(), lmmp_odd_nPr_ulong_(), lmmp_odd_nPr_ushort_(), lmmp_primefac_() , 以及 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因子数组的长度
警告
因子必须要单调递增,可以接受重复因子(但不推荐这样做),因子的贡献必须要大于0。 已假定进入朴素乘法时,因子数组元素都小于等于0xffff,同时假定了,因子数组为小因子大指数形式, 可以存在大的因子有略大的指数,但整体的趋势应是小因子大指数。 在组合数以及由阶乘和幂次构成的有理数中,暂未见不满足这些假设的例子。
返回
结果数组的长度

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

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

◆ lmmp_factors_mul_ushort_()

mp_size_t lmmp_factors_mul_ushort_ ( mp_ptr  dst,
mp_size_t  rn,
fac_ptr  fac,
ushort  nfactors 
)

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

参数
dst结果数组
rn结果数组的长度
fac因子数组(将会被递归覆盖),且因子数组元素都不可超过ushort范围
nfactors因子数组的长度
警告
因子必须要单调递增,且因子数组元素都不可超过ushort范围,可以接受重复因子(但不推荐这样做), 已假定进入朴素乘法时,因子数组元素都小于等于0xfff,同时假定了,因子数组为小因子大指数形式, 可以存在大的因子有略大的指数,但整体的趋势应是小因子大指数。 在组合数以及由阶乘和幂次构成的有理数中,暂未见不满足这些假设的例子。
返回
结果数组的长度

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

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

◆ lmmp_huff_tree_build_()

sint lmmp_huff_tree_build_ ( huff_tree ht)

构建哈夫曼乘法树

参数
ht哈夫曼乘法树指针
警告
ht!=NULL
返回
构建后的根节点索引

◆ lmmp_huff_tree_free_()

static void lmmp_huff_tree_free_ ( huff_tree ht)
inlinestatic

释放哈夫曼树

参数
ht哈夫曼树指针
警告
ht->size==0, ht!=NULL

在文件 ele_mul.h58 行定义.

58 {
60 lmmp_free(ht->root);
61 ht->cap = 0;
62 ht->size = 0;
63 ht->root = NULL;
64}
void lmmp_free(void *ptr)
内存释放函数(调用lmmp_heap_free_fn)
Definition memory.c:202
#define lmmp_param_assert(x)
Definition lmmp.h:401
#define n

引用了 huff_tree::cap, lmmp_free(), lmmp_param_assert, huff_tree::root , 以及 huff_tree::size.

+ 函数调用图:

◆ lmmp_huff_tree_init_()

static void lmmp_huff_tree_init_ ( huff_tree ht,
sint  cap 
)
inlinestatic

初始化哈夫曼乘法树

参数
ht哈夫曼乘法树指针
cap需要插入的元素的最大数量
警告
0<cap<2^30, ht!=NULL

在文件 ele_mul.h44 行定义.

44 {
45 lmmp_param_assert(cap > 0);
46 lmmp_param_assert(cap < (1 << 30));
48 ht->root = ALLOC_TYPE(2 * cap - 1, huff_node);
49 ht->cap = cap;
50 ht->size = 0;
51}
Copyright (C) 2026 HJimmyK(Jericho Knox)
Definition ele_mul.h:24
#define ALLOC_TYPE(n, type)
Definition tmp_alloc.h:173

引用了 ALLOC_TYPE, huff_tree::cap, lmmp_param_assert, huff_tree::root , 以及 huff_tree::size.

◆ lmmp_huff_tree_mul_()

mp_size_t lmmp_huff_tree_mul_ ( huff_tree ht,
sint  ridx,
mp_ptr  dst,
mp_ptr  tp 
)

将哈夫曼树中所有元素相乘

参数
ht哈夫曼乘法树指针
ridx哈夫曼乘法树根节点索引
dst结果指针(缓冲区长度为根节点的nn值)
tp临时指针(缓冲区长度为根节点的nn值)
警告
pq!=NULL, dst!=NULL, tp!=NULL, sep(dst,tp)
返回
结果指针的 limb 长度

◆ lmmp_huff_tree_push_()

static void lmmp_huff_tree_push_ ( huff_tree ht,
mp_srcptr  np,
mp_size_t  nn 
)
inlinestatic

入队哈夫曼树

参数
ht哈夫曼树指针
np待入队的元素指针
nn元素的 limb 长度
警告
ht!=NULL, ht->size<ht->cap, np!=NULL, nn>0
注解
传入乘法元素必须为非空元素,可以和其他乘法元素指向完全相同

在文件 ele_mul.h74 行定义.

74 {
76 lmmp_param_assert(ht->size < ht->cap);
78 lmmp_param_assert(nn > 0);
79 ht->root[ht->size].np = np;
80 ht->root[ht->size].nn = nn;
81 ht->root[ht->size].left = -1;
82 ht->root[ht->size].right = -1;
83 ht->size++;
84}

引用了 huff_tree::cap, huff_node::left, lmmp_param_assert, huff_node::nn, huff_node::np, huff_node::right, huff_tree::root , 以及 huff_tree::size.