16#ifndef __LAMMP_LGLG_H__
17#define __LAMMP_LGLG_H__
28#define tab(i) log2_fix32_q9[i - 1]
74 uint32_t idx =
n >> 22;
76 uint32_t idx1 = (idx) << 22;
77 uint32_t idx2 = (idx + 1) << 22;
80 uint64_t x64 = (uint64_t)x;
81 if ((idx != 511 && 2 *
n >= (idx1 + idx2)) || idx == 0 || idx == 1) {
83 uint64_t y1 =
tab(idx + 1);
84 uint64_t y2 =
tab(idx + 2);
85 idx1 = (idx + 1) << 22;
86 idx2 = (idx + 2) << 22;
87 int32_t x2x = idx2 -
n;
88 int32_t x1x = idx1 -
n;
89 r = (y1 * x2x - y2 * x1x);
94 uint64_t y1 =
tab(idx - 1);
95 uint64_t y2 =
tab(idx);
96 idx1 = (idx - 1) << 22;
98 int32_t x2x =
n - idx2;
99 int32_t x1x =
n - idx1;
100 r = (y2 * x1x - y1 * x2x);
104 r = (r >= 0x100000000) ? 0x100000000 : r;
111 int adj = (r & 0x3FFFFFF) ? 2 : 1;
112 return (r >> 26) + adj;
126 uint32_t idx =
n >> 22;
128 uint32_t idx1 = (idx) << 22;
129 uint32_t idx2 = (idx + 1) << 22;
132 if ((idx != 511 && 2 *
n >= (idx1 + idx2)) || idx == 0 || idx == 1) {
134 uint64_t y1 =
tab(idx + 1);
135 uint64_t y2 =
tab(idx + 2);
136 idx1 = (idx + 1) << 22;
137 idx2 = (idx + 2) << 22;
138 int32_t x2x = idx2 -
n;
139 int32_t x1x = idx1 -
n;
141 r = (y1 * x2x - y2 * x1x);
145 uint64_t y1 =
tab(idx - 1);
146 uint64_t y2 =
tab(idx);
147 idx1 = (idx - 1) << 22;
149 int32_t x2x =
n - idx2;
150 int32_t x1x =
n - idx1;
152 r = (y2 * x1x - y1 * x2x);
154 r = (r >= 0x100000000) ? 0xffffffff : r;
163 uint64_t ret = 2 * r +
r2;
164 uint64_t x64 = (uint64_t)x * 2 + 1;
181 uint32_t idx =
n >> 22;
183 uint32_t idx1 = (idx) << 22;
185 uint64_t r,
r2, y1, y2;
195 uint32_t x1x =
n - idx1;
205 uint64_t ret = 2 * r +
r2;
206 uint64_t x64 = (uint64_t)x * 2 + 1;
220 uint64_t r = 1901360723;
230 uint64_t r = 1901360722;
242 uint64_t
r3 = (uint64_t)
n << 26;
249 int adj = (r & 0x3FFFFFF) ? 1 : 0;
251 return (1 + r) / 2 + adj;
261 uint64_t
r3 = (uint64_t)
n << 26;
static uint64_t log2n_2n1_ceil(uint32_t n)
计算(2n+1)*log2(n)的ceil值
static uint64_t log2n_2n1_floor(uint32_t n)
计算(2n+1)*log2(n)的floor值
static uint64_t mul_log2e_1_ceil(uint32_t n)
计算 n * (log2(e)-1)
static uint64_t log2_fac_ceil(uint32_t n)
计算 log2(n!)的ceil值
static uint64_t log2_fac_floor(uint32_t n)
计算 log2(n!)的floor值
static uint64_t xlog2n_ceil(uint32_t x, uint32_t n)
计算x*log2(n)的ceil值
const uint32_t log2_fix32_q9[512]
Copyright (C) 2026 HJimmyK(Jericho Knox)
static uint64_t mul_log2e_1_floor(uint32_t n)
计算 n * (log2(e)-1)
#define clz_shl_u32(r, x, cnt)