16#include "../../../include/lammp/impl/inlines.h"
17#include "../../../include/lammp/impl/longlong.h"
18#include "../../../include/lammp/impl/log2_exp2.h"
19#include "../../../include/lammp/impl/tmp_alloc.h"
20#include "../../../include/lammp/numth.h"
21#include "../../../include/lammp/lmmpn.h"
30 dst[2] =
t[1] + (
dst[1] <
t[0] ? 1 : 0);
38 while (
dst[
n - 1] == 0) --
n;
135 }
else if (
n < 128) {
138 dst[1] = (
x[1] >> (64 -
n)) |
t;
139 dst[0] = (
x[1] <<
n) | (
x[0] >> (64 -
n));
156 r[1] =
ret[1] + (r[0] == 0 ? 1 : 0);
196 for (
i = 0;
i < ni;
i++) {
249#if LAMMP_DEBUG_ASSERT_CHECK == 1
261#define Ahr (dst + nlo)
274 }
else if (ni >= 2 *
nlo) {
315 rn +=
cy > 0 ? 1 : 0;
321 rn +=
cy > 0 ? 1 : 0;
mp_limb_t lmmp_cbrt_3_(mp_limb_t a0, mp_limb_t a1, mp_limb_t a2)
计算算数立方根 floor(cbrt(a0+a1*B+a2*B^2))
mp_size_t lmmp_cbrtapprox_(mp_ptr restrict dst, mp_srcptr restrict numa, mp_size_t na, mp_size_t ni)
static mp_size_t lmmp_cube_6_(mp_ptr restrict dst, mp_srcptr restrict numa)
void lmmp_cbrtapprox_6_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
计算近似立方根 floor(cbrt([numa,na]))-[0|1]
void lmmp_cbrt_6_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
计算算数立方根 floor(cbrt([numa,na]))
mp_limb_t lmmp_cbrtapprox_3_(mp_limb_t a0, mp_limb_t a1, mp_limb_t a2)
计算近似立方根 floor(cbrt(a0+a1*B+a2*B^2))-[0|1]
static void lmmp_cube_3_(mp_ptr restrict dst, mp_limb_t a)
Copyright (C) 2026 HJimmyK(Jericho Knox)
#define lmmp_copy(dst, src, n)
#define lmmp_zero(dst, n)
#define lmmp_debug_assert(x)
const mp_limb_t * mp_srcptr
#define lmmp_param_assert(x)
mp_limb_t lmmp_div_1_(mp_ptr dstq, mp_srcptr numa, mp_size_t na, mp_limb_t x)
单精度数除法
static int lmmp_cmp_(mp_srcptr numa, mp_srcptr numb, mp_size_t n)
比较函数(内联)
void lmmp_sqr_basecase_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
基础平方运算 [dst,2*na] = [numa,na]^2
#define lmmp_inc(p)
加1宏(预期无进位)
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]
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
void lmmp_div_(mp_ptr dstq, mp_ptr dstr, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
除法和取模操作
mp_limb_t lmmp_add_n_(mp_ptr dst, mp_srcptr numa, mp_srcptr numb, mp_size_t n)
无进位的n位加法 [dst,n] = [numa,n] + [numb,n]
void exp2_fixed_128(uint64_t *dst, uint64_t high, uint64_t low)
floor(exp2(x/B)*B-B), B=2^128
void log2_fixed_128(uint64_t *dst, uint64_t high, uint64_t low)
floor(log2(1+x/B)*B), B=2^128
uint64_t exp2_fixed_64(uint64_t x)
floor(exp2(x/B)*B-B), B=2^64
uint64_t log2_fixed_64(uint64_t x)
Copyright (C) 2026 HJimmyK(Jericho Knox)
ulong lmmp_cbrt_ulong_(ulong n)
计算算数立方根 floor(cbrt(n))
#define TALLOC_TYPE(n, type)