LAMMP 4.2.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)
 Copyright (C) 2026 HJimmyK(Jericho Knox)
 
#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.h73 行定义.

◆ MODLIMB_INVERSE_3

#define MODLIMB_INVERSE_3   ((mp_limb_t)0xAAAAAAAAAAAAAAAB)

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

在文件 divexact.h21 行定义.

◆ MODLIMB_INVERSE_9

#define MODLIMB_INVERSE_9   ((mp_limb_t)0x8E38E38E38E38E39)

在文件 divexact.h47 行定义.

函数说明

◆ 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.h82 行定义.

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

引用了 c, l, LIMB_BITS, MODLIMB_INVERSE_15, s , 以及 t.

被这些函数引用 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.h30 行定义.

30 {
31 mp_limb_t c = 0;
32 mp_limb_t l, q, s;
33 mp_size_t i = 0;
34 do {
35 s = numa[i];
36 l = s - c;
37 c = l > s;
39 dst[i] = q;
40 l = q + q;
41 c += l < q;
42 l += q;
43 c += l < q;
44 } while (++i < na);
45}
#define MODLIMB_INVERSE_3
Copyright (C) 2026 HJimmyK(Jericho Knox)
Definition divexact.h:21

引用了 c, l, MODLIMB_INVERSE_3 , 以及 s.

被这些函数引用 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.h56 行定义.

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

引用了 c, l, LIMB_BITS, MODLIMB_INVERSE_9, s , 以及 t.

被这些函数引用 lmmp_toom_interp7_().

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