LAMMP 4.2.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
div_basecase.c 文件参考
+ div_basecase.c 的引用(Include)关系图:

浏览源代码.

函数

mp_limb_t lmmp_div_basecase_ (mp_ptr restrict dstq, mp_ptr restrict numa, mp_size_t na, mp_srcptr restrict numb, mp_size_t nb, mp_limb_t inv21)
 Copyright (C) 2026 HJimmyK(Jericho Knox)
 

函数说明

◆ lmmp_div_basecase_()

mp_limb_t lmmp_div_basecase_ ( mp_ptr restrict  dstq,
mp_ptr restrict  numa,
mp_size_t  na,
mp_srcptr restrict  numb,
mp_size_t  nb,
mp_limb_t  inv21 
)

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/.

在文件 div_basecase.c20 行定义.

27 {
31 mp_size_t nq = na - nb;
32
33 numa += na;
34
35 mp_limb_t qh = lmmp_cmp_(numa - nb, numb, nb) >= 0;
36 if (qh) {
38 }
39
40 nb -= 2;
41 numa -= 2;
42
43 mp_limb_t d1 = numb[nb + 1], d0 = numb[nb + 0];
44
45 while (nq) {
47 --numa;
48 if (numa[2] == d1 && numa[1] == d0) {
49 q = LIMB_MAX;
50 lmmp_submul_1_(numa - nb, numb, nb + 2, q);
51 } else {
55 cy1 = numa[0] < cy;
56 numa[0] -= cy;
57 cy = numa[1] < cy1;
58 numa[1] -= cy1;
59 if (cy) {
60 lmmp_add_n_(numa - nb, numa - nb, numb, nb + 2);
61 --q;
62 }
63 }
64 dstq[--nq] = q;
65 }
66 return qh;
67}
uint64_t mp_size_t
Definition lmmp.h:77
#define LIMB_MAX
Definition lmmp.h:89
uint64_t mp_limb_t
Definition lmmp.h:76
#define lmmp_param_assert(x)
Definition lmmp.h:401
mp_limb_t lmmp_div_3_2_(mp_ptr numa, mp_srcptr numb, mp_limb_t inv21)
3/2位除法运算 [numa,2]=[numa,3] mod [numb,2]
static int lmmp_cmp_(mp_srcptr numa, mp_srcptr numb, mp_size_t n)
大数比较函数(内联)
Definition lmmpn.h:996
mp_limb_t lmmp_submul_1_(mp_ptr numa, mp_srcptr numb, mp_size_t n, mp_limb_t b)
大数乘以单limb并累减操作 [numa,n] -= [numb,n] * b
mp_limb_t lmmp_sub_n_(mp_ptr dst, mp_srcptr numa, mp_srcptr numb, mp_size_t n)
无借位的n位减法 [dst,n] = [numa,n] - [numb,n]
Definition sub_n.c:80
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]
Definition add_n.c:81
#define LIMB_B_2
Definition mparam.h:157
#define numb
#define n

引用了 LIMB_B_2, LIMB_MAX, lmmp_add_n_(), lmmp_cmp_(), lmmp_div_3_2_(), lmmp_param_assert, lmmp_sub_n_(), lmmp_submul_1_(), n , 以及 numb.

+ 函数调用图: