16#include "../../../include/lammp/impl/base_table.h"
17#include "../../../include/lammp/impl/inlines.h"
18#include "../../../include/lammp/impl/mparam.h"
19#include "../../../include/lammp/impl/tmp_alloc.h"
20#include "../../../include/lammp/lmmpn.h"
119 if (
na >= np + zeros) {
154 while (
nq &&
q[
nq - 1] == 0) --
nq;
158 while (
nr && r[
nr - 1] == 0) --
nr;
180 }
while (
numa[--
na] == 0);
248 for (
int i = 0;
i < 2; ++
i) {
261 for (
int i = 2;
i <
cpow; ++
i) {
265 np -=
tp[np - 1] == 0;
288 for (
int i = 1;
i <
cpow; ++
i) {
const mp_base_t lmmp_bases_table[255]
Copyright (C) 2026 HJimmyK(Jericho Knox)
#define lmmp_leading_zeros_
#define lmmp_tailing_zeros_
#define lmmp_copy(dst, src, n)
const mp_limb_t * mp_srcptr
#define lmmp_param_assert(x)
mp_limb_t lmmp_div_s_(mp_ptr dstq, mp_ptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
除法运算
static mp_size_t lmmp_div_inv_size_(mp_size_t nq, mp_size_t nb)
计算预计算逆元的尺寸
mp_limb_t lmmp_div_1_(mp_ptr dstq, mp_srcptr numa, mp_size_t na, mp_limb_t x)
单精度数除法
void lmmp_inv_prediv_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_size_t ni)
除法前的逆元预计算,[dst,ni] = invappr( (ni+1 MSLs of numa) + 1 ) / B
mp_limb_t lmmp_shr_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_size_t shr)
大数右移操作 [dst,na] = [numa,na]>>shr,dst的高shr位填充0
mp_limb_t lmmp_shl_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_size_t shl)
大数左移操作 [dst,na] = [numa,na]<<shl,dst的低shl位填充0
mp_limb_t lmmp_mul_1_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_limb_t x)
大数乘以单limb操作 [dst,na] = [numa,na] * x
mp_limb_t lmmp_div_mulinv_(mp_ptr dstq, mp_ptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb, mp_srcptr invappr, mp_size_t ni)
乘法逆元除法
mp_size_t lmmp_from_str_len_(const mp_byte_t *src, mp_size_t len, int base)
计算字符串转大数所需的 limb 缓冲区长度
#define DIV_MULINV_L_THRESHOLD
#define TO_STR_DIVIDE_THRESHOLD
#define TO_STR_BASEPOW_THRESHOLD
#define BALLOC_TYPE(n, type)
mp_size_t lmmp_to_str_(mp_byte_t *dst, mp_srcptr numa, mp_size_t na, int base)
大数转字符串操作 [numa,na,B] to [dst,return value,base]
static mp_size_t lmmp_to_str_divide_(mp_byte_t *dst, mp_ptr restrict numa, mp_size_t na, mp_basepow_t *pow, mp_ptr restrict tpq)
将mp_limb_t数组转换为字符串
static mp_size_t lmmp_to_str_basecase_(mp_byte_t *dst, mp_srcptr numa, mp_size_t na, int base)
将mp_limb_t数组转换为字符串
mp_size_t lmmp_to_str_len_(mp_srcptr numa, mp_size_t na, int base)
Copyright (C) 2026 HJimmyK(Jericho Knox)