lkml.org 
[lkml]   [2017]   [Dec]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRE: [PATCH v10 1/3] lib: Add strongly typed 64bit int_sqrt
Date
From: Crt Mori
> Sent: 20 December 2017 17:30
> I did a quick run through unit tests for the sensor and the results
> are way off
> ...

Try this version instead:
unsigned int sqrt64(unsigned long long x_in)
{
unsigned int x = x_in >> 32;

unsigned int b = 0;
unsigned int y = 0;
unsigned int i;

i = 31;
if (!x) {
x = x_in;
i = 15;
}
if (!(x & 0xffff0000)) {
x <<= 16;
i -= 8;
}
if (!(x & 0xff000000)) {
x <<= 8;
i -= 4;
}
if (!(x & 0xf0000000)) {
x <<= 4;
i -= 2;
}

do {
b <<= 2;
b |= x >> 30;
x <<= 2;
if (i == 16)
x = x_in;
y <<= 1;
if (b > y) {
b -= ++y;
y++;
}
} while (--i);

/* 'b' becomes 33 bits if the input is greater than 2^62 */
b <<= 1;
b |= x >> 31;
if (b > y || (b == y && x & (1u << 30)))
y |= 1;

return y;
}

I've tested that one with more values.

David

\
 
 \ /
  Last update: 2017-12-21 12:43    [W:0.073 / U:2.264 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site