LAMMP 4.2.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
sub_n.c
浏览该文件的文档.
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#include "../../../../include/lammp/lmmpn.h"
17
18
20 mp_size_t i = 0;
21 mp_limb_t cy = c;
22
23 for (; i + 4 <= n; i += 4) {
24 mp_limb_t a0, b0, r0;
25 mp_limb_t a1, b1, r1;
26 mp_limb_t a2, b2, r2;
27 mp_limb_t a3, b3, r3;
28
29 a0 = numa[i + 0];
30 b0 = numb[i + 0];
31
32 a1 = numa[i + 1];
33 b1 = numb[i + 1];
34
35 a2 = numa[i + 2];
36 b2 = numb[i + 2];
37
38 a3 = numa[i + 3];
39 b3 = numb[i + 3];
40
41 b0 += cy;
42 cy = (b0 < cy);
43 cy += (a0 < b0);
44 r0 = a0 - b0;
45
46 b1 += cy;
47 cy = (b1 < cy);
48 cy += (a1 < b1);
49 r1 = a1 - b1;
50
51 b2 += cy;
52 cy = (b2 < cy);
53 cy += (a2 < b2);
54 r2 = a2 - b2;
55
56 b3 += cy;
57 cy = (b3 < cy);
58 cy += (a3 < b3);
59 r3 = a3 - b3;
60
61 dst[i + 0] = r0;
62 dst[i + 1] = r1;
63 dst[i + 2] = r2;
64 dst[i + 3] = r3;
65 }
66
67 for (; i < n; i++) {
68 mp_limb_t a, b;
69 a = numa[i];
70 b = numb[i];
71 b += cy;
72 cy = (b < cy);
73 cy += (a < b);
74 dst[i] = a - b;
75 }
76
77 return cy;
78}
79
81 mp_size_t i = 0;
82 mp_limb_t cy = 0;
83
84 for (; i + 4 <= n; i += 4) {
85 mp_limb_t a0, b0, r0;
86 mp_limb_t a1, b1, r1;
87 mp_limb_t a2, b2, r2;
88 mp_limb_t a3, b3, r3;
89
90 a0 = numa[i + 0];
91 b0 = numb[i + 0];
92
93 a1 = numa[i + 1];
94 b1 = numb[i + 1];
95
96 a2 = numa[i + 2];
97 b2 = numb[i + 2];
98
99 a3 = numa[i + 3];
100 b3 = numb[i + 3];
101
102 b0 += cy;
103 cy = (b0 < cy);
104 cy += (a0 < b0);
105 r0 = a0 - b0;
106
107 b1 += cy;
108 cy = (b1 < cy);
109 cy += (a1 < b1);
110 r1 = a1 - b1;
111
112 b2 += cy;
113 cy = (b2 < cy);
114 cy += (a2 < b2);
115 r2 = a2 - b2;
116
117 b3 += cy;
118 cy = (b3 < cy);
119 cy += (a3 < b3);
120 r3 = a3 - b3;
121
122 dst[i + 0] = r0;
123 dst[i + 1] = r1;
124 dst[i + 2] = r2;
125 dst[i + 3] = r3;
126 }
127
128 for (; i < n; i++) {
129 mp_limb_t a, b;
130 a = numa[i];
131 b = numb[i];
132 b += cy;
133 cy = (b < cy);
134 cy += (a < b);
135 dst[i] = a - b;
136 }
137
138 return cy;
139}
#define c
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 b0
#define b1
#define a0
#define a1
#define r2
#define r1
#define a2
#define r3
#define r0
#define b2
#define a3
#define numb
#define n
#define b3
mp_limb_t lmmp_sub_n_(mp_ptr dst, mp_srcptr numa, mp_srcptr numb, mp_size_t n)
无借位的n位减法 [dst,n] = [numa,n] - [numb,n]
Definition sub_n.c:80
mp_limb_t lmmp_sub_nc_(mp_ptr dst, mp_srcptr numa, mp_srcptr numb, mp_size_t n, mp_limb_t c)
Copyright (C) 2026 HJimmyK(Jericho Knox)
Definition sub_n.c:19