LAMMP 4.1.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
toom_interp.h
浏览该文件的文档.
1/*
2 * [LAMMP]
3 * Copyright (C) [2025-2026] [HJimmyK(Jericho Knox)]
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
19#ifndef __LAMMP_TOOM_INTERP_H__
20#define __LAMMP_TOOM_INTERP_H__
21
22#include "tmp_alloc.h"
23#include "../lmmpn.h"
24
26
28
29/**
30 * @brief Toom插值计算(5点插值),用于Toom-33和Toom-42乘法算法
31 * @param dst 输出结果缓冲区,存储插值计算结果
32 * v(0)储存在[dst,2n],v(1)储存在[dst+2n,2n]
33 * @param v2 v(2)插值点值,长度为 2n+1
34 * @param vm1 v(-1)插值点值,长度为 2n+1
35 * @param n 操作数的 limb 长度
36 * @param spt 系数r4的长度
37 * @param vm1_neg 符号标记:v(-1)是否为负数(1表示负,0表示正)
38 * @param vinf0 无穷远点插值的低64位值
39 */
40void lmmp_toom_interp5_(mp_ptr dst, mp_ptr v2, mp_ptr vm1, mp_size_t n, mp_size_t spt, int vm1_neg, mp_limb_t vinf0);
41
42/**
43 * @brief Toom插值计算(6点插值):用于Toom-43和Toom-52 乘法算法
44 * @param dst 输出:最终乘积结果缓冲区(5n + w0n limbs)
45 * w5 储存在[dst,2n], w3 储存在[dst+2n,2n+1], w0 储存在[dst+5n,w0n].
46 * @param n 输入:Toom-6 拆分后每段标准 limb 长度
47 * @param flags 输入:Toom-6 插值符号标志位(控制正负号运算)
48 * - toom6_vm2_neg: 对应 x=-2 点值符号
49 * - toom6_vm1_neg: 对应 x=-1 点值符号
50 * @param w4 输入/临时:点值 W4 缓冲区(2n+1 limbs)
51 * @param w2 输入/临时:点值 W2 缓冲区(2n+1 limbs)
52 * @param w1 输入/临时:点值 W1 缓冲区(2n+1 limbs)
53 * @param w0n 输入:最低位段 W0 的实际 limb 长度(0 < w0n <= 2n)
54 * @note w5=f(0), w4=f(-1), w3=f(1), w2=f(-2), w1=f(2), w0=f(inf)
55 * @warning n>0, 0<w0n<=2n
56 */
57void lmmp_toom_interp6_(mp_ptr dst, mp_size_t n, enum toom6_flags flags, mp_ptr w4, mp_ptr w2, mp_ptr w1, mp_size_t w0n);
58
59/**
60 * @brief Toom插值计算(7点插值):用于Toom-44、Toom-53、Toom-62 乘法算法
61 * @param dst 输出结果缓冲区,存储插值计算结果(6*n + w6n limbs)
62 * w0 储存在[dst,2n], w2 储存在[dst+2n,2n+1], w6 储存在[dst+6n,w6n].
63 * @param n 输入:Toom-7 拆分后每段标准 limb 长度
64 * @param flags 输入:Toom-7 符号标志位,控制插值中的正负号运算
65 * - toom7_w1_neg: 点值 W1 符号位
66 * - toom7_w3_neg: 点值 W3 符号位
67 * @param w1 输入/临时:点值 W1 缓冲区(2n+1 limbs)
68 * @param w3 输入/临时:点值 W3 缓冲区(2n+1 limbs)
69 * @param w4 输入/临时:点值 W4 缓冲区(2n+1 limbs)
70 * @param w5 输入/临时:点值 W5 缓冲区(2n+1 limbs)
71 * @param w6n 输入:最低位段 W6 的实际 limb 长度 (0 < w6n ≤ 2n)
72 * @param tp 临时缓存空间(2*n+1 limbs)
73 * @note w0=f(0), w1=f(-2), w2=f(1), w3=f(-1), w4=f(2), w5=64*f(1/2), w6=f(inf),
74 * @warning n>0, 0<w6n<=2n
75 */
77 mp_size_t w6n, mp_ptr tp);
78
79/**
80 * @brief Toom-3 专用:3次多项式在 x = +1 和 x = -1 处求值
81 * 计算 P(+1) 和 P(-1),其中 P(x) 是一个3次多项式(4段系数)。
82 * @param xp1 输出:P(+1) 的结果(n+1 个 limbs 空间)
83 * @param xm1 输出:P(-1) 的结果(n+1 个 limbs 空间)
84 * @param xp 输入:多项式系数数组(共4段,每段 n limbs)
85 * @param n 输入:每段完整系数的 limb 长度
86 * @param x3n 输入:最后一段系数的实际长度(通常等于 n)
87 * @param tp 临时缓存空间(至少 n+1 limbs)
88 * @warning 0<x3n<=n
89 * @return 符号位:0=正,~0=负(对应 P(-1))
90 */
92
93/**
94 * @brief Toom-3 专用:3次多项式在 x = +2 和 x = -2 处求值
95 * 计算 P(+2) 和 P(-2),其中 P(x) 是一个3次多项式(4段系数)。
96 * @param xp2 输出:P(+2) 的结果(n+1 个 limbs 空间)
97 * @param xm2 输出:P(-2) 的结果(n+1 个 limbs 空间)
98 * @param xp 输入:多项式系数数组(共4段,每段 n limbs)
99 * @param n 输入:每段完整系数的 limb 长度
100 * @param x3n 输入:最后一段系数的实际长度
101 * @param tp 临时缓存空间(至少 n+1 limbs)
102 * @warning 0<x3n<=n
103 * @return 符号位:0=正,~0=负(对应 P(-2))
104 */
106
107/**
108 * @brief 通用高阶 Toom 求值:k次多项式在 x = +1 和 x = -1 处求值
109 * @param xp1 输出:P(+1) 的结果(n+1 limbs)
110 * @param xm1 输出:P(-1) 的结果(n+1 limbs)
111 * @param k 输入:多项式次数(也是完整段的数量)
112 * @param xp 输入:多项式系数数组
113 * @param n 输入:每段完整系数的 limb 长度
114 * @param hn 输入:最后一段系数的实际长度
115 * @param tp 临时缓存空间(n+1 limbs)
116 * @warning 0<hn<=n, 3 < k
117 * @return 符号位:0=正,~0=负
118 */
119int lmmp_toom_eval_pm1_(mp_ptr xp1, mp_ptr xm1, unsigned k, mp_srcptr xp, mp_size_t n, mp_size_t hn, mp_ptr tp);
120
121/**
122 * @brief 通用高阶 Toom 求值:k次多项式在 x = +2 和 x = -2 处求值
123 * @param xp2 输出:P(+2) 的结果(n+1 limbs)
124 * @param xm2 输出:P(-2) 的结果(n+1 limbs)
125 * @param k 输入:多项式次数
126 * @param xp 输入:多项式系数数组
127 * @param n 输入:每段完整系数的 limb 长度
128 * @param hn 输入:最后一段系数的实际长度
129 * @param tp 临时缓存空间(n+1 limbs)
130 * @warning 0<hn<=n, 3 < k < LIMB_BITS
131 * @return 符号位:0=正,~0=负
132 */
133int lmmp_toom_eval_pm2_(mp_ptr xp2, mp_ptr xm2, unsigned k, mp_srcptr xp, mp_size_t n, mp_size_t hn, mp_ptr tp);
134
135#endif // __LAMMP_TOOM_INTERP_H__
#define k
mp_limb_t * mp_ptr
Definition lmmp.h:215
uint64_t mp_size_t
Definition lmmp.h:212
const mp_limb_t * mp_srcptr
Definition lmmp.h:216
uint64_t mp_limb_t
Definition lmmp.h:211
#define vm1
#define v2
#define tp
#define w3
#define w5
#define w2
int lmmp_toom_eval_pm2_(mp_ptr xp2, mp_ptr xm2, unsigned k, mp_srcptr xp, mp_size_t n, mp_size_t hn, mp_ptr tp)
通用高阶 Toom 求值:k次多项式在 x = +2 和 x = -2 处求值
void lmmp_toom_interp6_(mp_ptr dst, mp_size_t n, enum toom6_flags flags, mp_ptr w4, mp_ptr w2, mp_ptr w1, mp_size_t w0n)
Toom插值计算(6点插值):用于Toom-43和Toom-52 乘法算法
void lmmp_toom_interp5_(mp_ptr dst, mp_ptr v2, mp_ptr vm1, mp_size_t n, mp_size_t spt, int vm1_neg, mp_limb_t vinf0)
Toom插值计算(5点插值),用于Toom-33和Toom-42乘法算法
toom6_flags
Definition toom_interp.h:25
@ toom6_vm2_neg
Definition toom_interp.h:25
@ toom6_vm1_neg
Definition toom_interp.h:25
@ toom6_all_pos
Definition toom_interp.h:25
toom7_flags
Definition toom_interp.h:27
@ toom7_w1_neg
Definition toom_interp.h:27
@ toom7_w3_neg
Definition toom_interp.h:27
void lmmp_toom_interp7_(mp_ptr dst, mp_size_t n, enum toom7_flags flags, mp_ptr w1, mp_ptr w3, mp_ptr w4, mp_ptr w5, mp_size_t w6n, mp_ptr tp)
Toom插值计算(7点插值):用于Toom-44、Toom-53、Toom-62 乘法算法
int lmmp_toom_eval_pm1_(mp_ptr xp1, mp_ptr xm1, unsigned k, mp_srcptr xp, mp_size_t n, mp_size_t hn, mp_ptr tp)
通用高阶 Toom 求值:k次多项式在 x = +1 和 x = -1 处求值
int lmmp_toom_eval_dgr3_pm2_(mp_ptr xp2, mp_ptr xm2, mp_srcptr xp, mp_size_t n, mp_size_t x3n, mp_ptr tp)
Toom-3 专用:3次多项式在 x = +2 和 x = -2 处求值 计算 P(+2) 和 P(-2),其中 P(x) 是一个3次多项式(4段系数)。
int lmmp_toom_eval_dgr3_pm1_(mp_ptr xp1, mp_ptr xm1, mp_srcptr xp, mp_size_t n, mp_size_t x3n, mp_ptr tp)
Toom-3 专用:3次多项式在 x = +1 和 x = -1 处求值 计算 P(+1) 和 P(-1),其中 P(x) 是一个3次多项式(4段系数)。