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
FILE_SECBOOT
( PERMITTED );
26
27
/** @file
28
*
29
* Integer square root
30
*
31
*/
32
33
#include <
ipxe/isqrt.h
>
34
35
/**
36
* Find integer square root
37
*
38
* @v value Value
39
* @v isqrt Integer square root of value
40
*/
41
unsigned
long
isqrt
(
unsigned
long
value
) {
42
unsigned
long
result
= 0;
43
unsigned
long
bit
= ( 1UL << ( ( 8 *
sizeof
(
bit
) ) - 2 ) );
44
45
while
(
bit
>
value
)
46
bit
>>= 2;
47
while
(
bit
) {
48
if
(
value
>= (
result
+
bit
) ) {
49
value
-= (
result
+
bit
);
50
result
= ( (
result
>> 1 ) +
bit
);
51
}
else
{
52
result
>>= 1;
53
}
54
bit
>>= 2;
55
}
56
return
result
;
57
}
isqrt
unsigned long isqrt(unsigned long value)
Find integer square root.
Definition:
isqrt.c:41
bit
static unsigned int unsigned int bit
Definition:
bigint.h:392
FILE_SECBOOT
FILE_SECBOOT(PERMITTED)
value
pseudo_bit_t value[0x00020]
Definition:
arbel.h:13
FILE_LICENCE
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
isqrt.h
Integer square root.
result
uint16_t result
Definition:
hyperv.h:33
Generated by
1.8.15