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

浏览源代码.

函数

mp_limb_t lmmp_sqrt_1_ (mp_ptr dsts, mp_limb_t x)
 计算算术平方根 floor(sqrt(x))
 
mp_limb_t lmmp_sqrt_2_ (mp_ptr dsts, mp_ptr dstr, mp_srcptr numa)
 计算算术平方根 floor(sqrt([numa,2]))
 
ulong lmmp_sqrt_ulong_ (ulong a)
 Copyright (C) 2026 HJimmyK(Jericho Knox)
 

函数说明

◆ lmmp_sqrt_1_()

mp_limb_t lmmp_sqrt_1_ ( mp_ptr  dsts,
mp_limb_t  x 
)

计算算术平方根 floor(sqrt(x))

参数
dsts结果指针(1个limb)
x被开方数
警告
x>=B/4, dsts!=NULL
注解
[dsts,1]=floor(sqrt(x)), return remainder
返回
余数

在文件 sqrt_1.c33 行定义.

33 {
36 *dsts = s;
37 return x - s * s;
38}
uint64_t mp_limb_t
Definition lmmp.h:113
#define lmmp_param_assert(x)
Definition lmmp.h:496
#define LIMB_B_4
Definition mparam.h:159
#define s
#define n
ulong lmmp_sqrt_ulong_(ulong a)
Copyright (C) 2026 HJimmyK(Jericho Knox)
Definition sqrt_1.c:22

引用了 LIMB_B_4, lmmp_param_assert, lmmp_sqrt_ulong_(), n , 以及 s.

被这些函数引用 lmmp_sqrt_() , 以及 lmmp_sqrt_2_().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ lmmp_sqrt_2_()

mp_limb_t lmmp_sqrt_2_ ( mp_ptr  dsts,
mp_ptr  dstr,
mp_srcptr  numa 
)

计算算术平方根 floor(sqrt([numa,2]))

参数
dsts结果指针(1个limb)
dstr余数指针(1个limb)
numa被开方数指针
警告
numa[1]>=B/4, dsts!=NULL, dstr!=NULL, numa!=NULL
注解
[dsts,1]=floor(sqrt([numa,2])), rh:[dstr,1]=remainder, return rh
返回
余数的高位

在文件 sqrt_1.c40 行定义.

40 {
42 mp_limb_t rl, s, q, al, u;
44
45 rl = lmmp_sqrt_1_(&s, numa[1]);
46 al = numa[0];
47
48 //(r:alh)/2
49 rl = rl << 31 | al >> 33;
50 q = rl / s;
51 q -= q >> 32;
52
53 u = rl - s * q;
54 s = s << 32 | q;
55 rh = u >> 31;
56 rl = (u << 33) | (al & (((mp_limb_t)1 << 33) - 1));
57
58 q *= q;
59 rh -= rl < q;
60 rl -= q;
61 if (rh < 0) {
62 rl += s;
63 rh += rl < s;
64 --s;
65 rl += s;
66 rh += rl < s;
67 }
68
69 dsts[0] = s;
70 dstr[0] = rl;
71 return rh;
72}
int64_t mp_slimb_t
Definition lmmp.h:115
mp_limb_t lmmp_sqrt_1_(mp_ptr dsts, mp_limb_t x)
计算算术平方根 floor(sqrt(x))
Definition sqrt_1.c:33

引用了 LIMB_B_4, lmmp_param_assert, lmmp_sqrt_1_(), n , 以及 s.

被这些函数引用 lmmp_sqrt_divide_().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ lmmp_sqrt_ulong_()

ulong lmmp_sqrt_ulong_ ( ulong  a)

Copyright (C) 2026 HJimmyK(Jericho Knox)

计算算术平方根 floor(sqrt(a))

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

在文件 sqrt_1.c22 行定义.

22 {
23 ulong is;
24
25 is = (ulong)sqrt((double)a);
26
27 is -= (is * is > a);
28 if (is == (1ULL << 32))
29 is--;
30 return is;
31}
uint64_t ulong
Definition numth.h:32

引用了 n.

被这些函数引用 lmmp_nthroot_ulong_() , 以及 lmmp_sqrt_1_().

+ 这是这个函数的调用关系图: