On 21 December 2017 at 12:43, David Laight <David.Laight@xxxxxxxxxx> wrote: > 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 can be u8. And I will still use explicit typing. > > 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; > } > This part above looks like FLS > 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 > This one indeed works. I did some more testing this morning and I am fine with either. So question is: Do I make change as per David's suggestion with his sign-off, or leave the version it was before the change? -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html