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

浏览源代码.

函数

void lmmp_mul_ (mp_ptr restrict dst, mp_srcptr restrict numa, mp_size_t na, mp_srcptr restrict numb, mp_size_t nb)
 Copyright (C) 2026 HJimmyK(Jericho Knox)
 
void lmmp_mul_n_ (mp_ptr restrict dst, mp_srcptr restrict numa, mp_srcptr restrict numb, mp_size_t n)
 
void lmmp_sqr_ (mp_ptr restrict dst, mp_srcptr restrict numa, mp_size_t na)
 

函数说明

◆ lmmp_mul_()

void lmmp_mul_ ( mp_ptr restrict  dst,
mp_srcptr restrict  numa,
mp_size_t  na,
mp_srcptr restrict  numb,
mp_size_t  nb 
)

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

在文件 mul.c40 行定义.

40 {
43 if (na == nb) {
44 if (numa == numb)
46 else
48 } else if ((nb < MUL_TOOM22_THRESHOLD || nb < MUL_TOOMX2_THRESHOLD) && !(4 * na < 5 * nb)) {
49 if (na <= PART_SIZE || nb <= 2)
51 else {
54 dst += PART_SIZE;
55 numa += PART_SIZE;
56 na -= PART_SIZE;
57 lmmp_copy(tp, dst, nb);
58 while (na > PART_SIZE) {
60 if (lmmp_add_n_(dst, dst, tp, nb))
61 lmmp_inc(dst + nb);
62 dst += PART_SIZE;
63 numa += PART_SIZE;
64 na -= PART_SIZE;
65 lmmp_copy(tp, dst, nb);
66 }
67 if (na >= nb)
69 else
71 if (lmmp_add_n_(dst, dst, tp, nb))
72 lmmp_inc(dst + nb);
73 }
74 } else if (((na + nb) >> 1) < MUL_TOOM44_THRESHOLD || 2 * nb < MUL_TOOM44_THRESHOLD) {
75 if (na < 3 * nb) {
76 if (4 * na < 5 * nb) {
79 else
81 } else if (5 * na < 9 * nb)
83 else
85 } else
87 } else if (((na + nb) >> 1) < MUL_FFT_THRESHOLD || 3 * nb < MUL_FFT_THRESHOLD) {
88 if (na < 5 * nb) {
89 if (4 * na < 5 * nb)
91 else if (3 * na < 5 * nb)
93 else if (9 * na < 20 * nb)
95 else if (na < 3 * nb)
97 else
99 } else
101 } else {
102 if (na < 6 * nb)
104 else
106 }
107}
#define lmmp_mul_n_
Definition inlines.h:167
#define lmmp_sqr_
Definition inlines.h:166
#define lmmp_copy(dst, src, n)
Definition lmmp.h:367
uint64_t mp_limb_t
Definition lmmp.h:76
#define lmmp_param_assert(x)
Definition lmmp.h:401
void lmmp_mul_toom22_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-22乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_toom44_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-44乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_toom42_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-42乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_toom42_unbalance_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-42不平衡乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
#define lmmp_inc(p)
大数加1宏(预期无进位)
Definition lmmpn.h:938
void lmmp_mul_toom43_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-43乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_basecase_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
基础乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_toom32_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-32乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_toom52_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-52乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_toom62_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-62乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_fft_unbalance_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
FFT不平衡乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_toom53_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-53乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_fft_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
FFT乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
Definition mul_fft.c:1095
void lmmp_mul_toom62_unbalance_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-62不平衡乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
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
void lmmp_mul_toom33_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
Toom-33乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
#define MUL_FFT_THRESHOLD
Definition mparam.h:54
#define MUL_TOOM22_THRESHOLD
Definition mparam.h:46
#define PART_SIZE
Definition mparam.h:89
#define MUL_TOOM33_THRESHOLD
Definition mparam.h:50
#define MUL_TOOMX2_THRESHOLD
Definition mparam.h:48
#define MUL_TOOM44_THRESHOLD
Definition mparam.h:52
#define numb
#define tp
#define n

引用了 lmmp_add_n_(), lmmp_copy, lmmp_inc, lmmp_mul_basecase_(), lmmp_mul_fft_(), lmmp_mul_fft_unbalance_(), lmmp_mul_n_, lmmp_mul_toom22_(), lmmp_mul_toom32_(), lmmp_mul_toom33_(), lmmp_mul_toom42_(), lmmp_mul_toom42_unbalance_(), lmmp_mul_toom43_(), lmmp_mul_toom44_(), lmmp_mul_toom52_(), lmmp_mul_toom53_(), lmmp_mul_toom62_(), lmmp_mul_toom62_unbalance_(), lmmp_param_assert, lmmp_sqr_, MUL_FFT_THRESHOLD, MUL_TOOM22_THRESHOLD, MUL_TOOM33_THRESHOLD, MUL_TOOM44_THRESHOLD, MUL_TOOMX2_THRESHOLD, n, numb, PART_SIZE , 以及 tp.

+ 函数调用图:

◆ lmmp_mul_n_()

void lmmp_mul_n_ ( mp_ptr restrict  dst,
mp_srcptr restrict  numa,
mp_srcptr restrict  numb,
mp_size_t  n 
)

在文件 mul.c109 行定义.

109 {
112 else if (n < MUL_TOOM33_THRESHOLD)
114 else if (n < MUL_TOOM44_THRESHOLD)
116 else if (n < MUL_FFT_THRESHOLD)
118 else
120}

引用了 lmmp_mul_basecase_(), lmmp_mul_fft_(), lmmp_mul_toom22_(), lmmp_mul_toom33_(), lmmp_mul_toom44_(), MUL_FFT_THRESHOLD, MUL_TOOM22_THRESHOLD, MUL_TOOM33_THRESHOLD, MUL_TOOM44_THRESHOLD, n , 以及 numb.

+ 函数调用图:

◆ lmmp_sqr_()

void lmmp_sqr_ ( mp_ptr restrict  dst,
mp_srcptr restrict  numa,
mp_size_t  na 
)

在文件 mul.c122 行定义.

122 {
125 else if (na < MUL_TOOM33_THRESHOLD)
127 else if (na < MUL_TOOM44_THRESHOLD)
129 else if (na < MUL_FFT_THRESHOLD)
131 else
133}
void lmmp_sqr_basecase_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
基础平方运算 [dst,2*na] = [numa,na]^2
void lmmp_sqr_toom2_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
Toom-2平方运算 [dst,2*na] = [numa,na]^2
void lmmp_sqr_toom3_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
Toom-3平方运算 [dst,2*na] = [numa,na]^2
void lmmp_sqr_toom4_(mp_ptr pp, mp_srcptr ap, mp_size_t an)
Toom-4平方运算 [dst,2*na] = [numa,na]^2

引用了 lmmp_mul_fft_(), lmmp_sqr_basecase_(), lmmp_sqr_toom2_(), lmmp_sqr_toom3_(), lmmp_sqr_toom4_(), MUL_FFT_THRESHOLD, MUL_TOOM22_THRESHOLD, MUL_TOOM33_THRESHOLD, MUL_TOOM44_THRESHOLD , 以及 n.

+ 函数调用图: