iPXE
core
isqrt.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2014 Michael Brown <mbrown@fensystems.co.uk>.
3
*
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU General Public License as
6
* published by the Free Software Foundation; either version 2 of the
7
* License, or any later version.
8
*
9
* This program is distributed in the hope that it will be useful, but
10
* WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17
* 02110-1301, USA.
18
*
19
* You can also choose to distribute this program under the terms of
20
* the Unmodified Binary Distribution Licence (as given in the file
21
* COPYING.UBDL), provided that you have satisfied its requirements.
22
*/
23
24
FILE_LICENCE
( GPL2_OR_LATER_OR_UBDL );
25
26
/** @file
27
*
28
* Integer square root
29
*
30
*/
31
32
#include <
ipxe/isqrt.h
>
33
34
/**
35
* Find integer square root
36
*
37
* @v value Value
38
* @v isqrt Integer square root of value
39
*/
40
unsigned
long
isqrt
(
unsigned
long
value
) {
41
unsigned
long
result
= 0;
42
unsigned
long
bit
= ( 1UL << ( ( 8 *
sizeof
(
bit
) ) - 2 ) );
43
44
while
(
bit
>
value
)
45
bit
>>= 2;
46
while
(
bit
) {
47
if
(
value
>= (
result
+
bit
) ) {
48
value
-= (
result
+
bit
);
49
result
= ( (
result
>> 1 ) +
bit
);
50
}
else
{
51
result
>>= 1;
52
}
53
bit
>>= 2;
54
}
55
return
result
;
56
}
bit
static unsigned int unsigned int bit
Definition:
bigint.h:208
isqrt
unsigned long isqrt(unsigned long value)
Find integer square root.
Definition:
isqrt.c:40
result
int result
Definition:
bigint.h:160
value
pseudo_bit_t value[0x00020]
Definition:
arbel.h:13
FILE_LICENCE
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
isqrt.h
Integer square root.
Generated by
1.8.15