LAMMP 4.2.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
base_table.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_BASE_TABLE_H__
17#define __LAMMP_BASE_TABLE_H__
18
19#include "../lmmpn.h"
20
21typedef struct mp_base_t {
22 // 单个limb能容纳的基数的最大幂次
23 // 二的幂次存储 log2(base)
24 // large_base = base ^ digits_in_limb
26 // ceiling(2^64*log2(base)/log2(2^64))
27 // N 位 base 数最多需要 N * lg_base / 2^64 + 1 个 limb
29 // N 位二进制数最多需要 N * inv_lg_base / 2^64 + 1 个 base 进制位
30 // ceiling(2^64/log2(base))
32 // 单个limb可容纳的最大基数位数
33 // floor(64/log2(base))
35 // 基数(2~256)
36 int base;
38
39typedef struct mp_basepow_t {
40 // 基数幂值(base^digits)
42 // p的 limb 长度
44 // 归一化p的逆元
46 // invp的有效长度
48 // 去除的末尾零 limb 长度
50 // 基数幂的指数(log_base(p))
52 // p归一化时的移位位数
54 // 基数
55 int base;
57
58extern const mp_base_t lmmp_bases_table[255];
59
60#endif // __LAMMP_BASE_TABLE_H__
mp_size_t ni
Definition base_table.h:47
int digits_in_limb
Definition base_table.h:34
mp_size_t digits
Definition base_table.h:51
mp_ptr invp
Definition base_table.h:45
mp_size_t np
Definition base_table.h:43
mp_limb_t lg_base
Definition base_table.h:28
const mp_base_t lmmp_bases_table[255]
Copyright (C) 2026 HJimmyK(Jericho Knox)
Definition base_table.c:18
mp_limb_t large_base
Definition base_table.h:25
mp_limb_t inv_lg_base
Definition base_table.h:31
mp_size_t zeros
Definition base_table.h:49
Copyright (C) 2026 HJimmyK(Jericho Knox)
Definition base_table.h:21
mp_limb_t * mp_ptr
Definition lmmp.h:80
uint64_t mp_size_t
Definition lmmp.h:77
uint64_t mp_limb_t
Definition lmmp.h:76