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