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

浏览源代码.

宏定义

#define MODLIMB_INVERSE_15   ((mp_limb_t)0xEEEEEEEEEEEEEEEF)
 
#define MODLIMB_INVERSE_3   ((mp_limb_t)0xAAAAAAAAAAAAAAAB)
 
#define MODLIMB_INVERSE_9   ((mp_limb_t)0x8E38E38E38E38E39)
 

函数

static void lmmp_divexact_by15_ (mp_ptr dst, mp_srcptr numa, mp_size_t na)
 精确除以15([dst,na] = [numa,na] / 15)
 
static void lmmp_divexact_by3_ (mp_ptr dst, mp_srcptr numa, mp_size_t na)
 精确除以3([dst,na] = [numa,na] / 3)
 
static void lmmp_divexact_by9_ (mp_ptr dst, mp_srcptr numa, mp_size_t na)
 精确除以9([dst,na] = [numa,na] / 9)
 

宏定义说明

◆ MODLIMB_INVERSE_15

#define MODLIMB_INVERSE_15   ((mp_limb_t)0xEEEEEEEEEEEEEEEF)

在文件 divexact.h76 行定义.

◆ MODLIMB_INVERSE_3

#define MODLIMB_INVERSE_3   ((mp_limb_t)0xAAAAAAAAAAAAAAAB)

在文件 divexact.h24 行定义.

◆ MODLIMB_INVERSE_9

#define MODLIMB_INVERSE_9   ((mp_limb_t)0x8E38E38E38E38E39)

在文件 divexact.h50 行定义.

函数说明

◆ lmmp_divexact_by15_()

static void lmmp_divexact_by15_ ( mp_ptr  dst,
mp_srcptr  numa,
mp_size_t  na 
)
inlinestatic

精确除以15([dst,na] = [numa,na] / 15)

参数
dst结果存储位置
numa被除数
na被除数长度
警告
eqsep(dst,numa), na>0

在文件 divexact.h85 行定义.

85 {
86 mp_limb_t c = 0;
87 mp_limb_t l, q, s, t, carry;
88 mp_size_t i = 0;
89 do {
90 s = numa[i];
91 l = s - c;
92 c = l > s;
93 q = l * MODLIMB_INVERSE_15;
94 dst[i] = q;
95 // carry from 15*q = (q<<4) - q
96 t = q << 4;
97 carry = (q >> (LIMB_BITS - 4)) - (t < q);
98 c += carry;
99 } while (++i < na);
100}
#define MODLIMB_INVERSE_15
Definition divexact.h:76
uint64_t mp_size_t
Definition lmmp.h:212
uint64_t mp_limb_t
Definition lmmp.h:211
#define LIMB_BITS
Definition lmmp.h:221

引用了 LIMB_BITS , 以及 MODLIMB_INVERSE_15.

被这些函数引用 lmmp_toom_interp7_().

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

◆ lmmp_divexact_by3_()

static void lmmp_divexact_by3_ ( mp_ptr  dst,
mp_srcptr  numa,
mp_size_t  na 
)
inlinestatic

精确除以3([dst,na] = [numa,na] / 3)

参数
dst结果存储位置
numa被除数
na被除数长度
警告
eqsep(dst,numa), na>0

在文件 divexact.h33 行定义.

33 {
34 mp_limb_t c = 0;
35 mp_limb_t l, q, s;
36 mp_size_t i = 0;
37 do {
38 s = numa[i];
39 l = s - c;
40 c = l > s;
41 q = l * MODLIMB_INVERSE_3;
42 dst[i] = q;
43 l = q + q;
44 c += l < q;
45 l += q;
46 c += l < q;
47 } while (++i < na);
48}
#define MODLIMB_INVERSE_3
Definition divexact.h:24

引用了 MODLIMB_INVERSE_3.

被这些函数引用 lmmp_toom_interp5_(), lmmp_toom_interp6_() , 以及 lmmp_toom_interp7_().

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

◆ lmmp_divexact_by9_()

static void lmmp_divexact_by9_ ( mp_ptr  dst,
mp_srcptr  numa,
mp_size_t  na 
)
inlinestatic

精确除以9([dst,na] = [numa,na] / 9)

参数
dst结果存储位置
numa被除数
na被除数长度
警告
eqsep(dst,numa), na>0

在文件 divexact.h59 行定义.

59 {
60 mp_limb_t c = 0;
61 mp_limb_t l, q, s, t, carry;
62 mp_size_t i = 0;
63 do {
64 s = numa[i];
65 l = s - c;
66 c = l > s;
67 q = l * MODLIMB_INVERSE_9;
68 dst[i] = q;
69 // carry from 9*q = (q<<3) + q
70 t = q << 3;
71 carry = (q >> (LIMB_BITS - 3)) + ((t + q) < t);
72 c += carry;
73 } while (++i < na);
74}
#define MODLIMB_INVERSE_9
Definition divexact.h:50

引用了 LIMB_BITS , 以及 MODLIMB_INVERSE_9.

被这些函数引用 lmmp_toom_interp7_().

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