分享一个32位无符号整数开平方函数(C++)
分享一个32位无符号整数开平方函数(C++)
由于某些原因,要用到相对高效的整数开方功能,就写下了此函数。
函数代码小巧而简单,只用到加减、移位和比较,目测有不错的效率,在此记录并分享。
uint32_t sqrt32(uint32_t x)
{
uint32_t m = 0x80000000u, y = 0u, t;
do if((t = y + (m >> 1)) <= x)
{
x -= t;
y = (y | m) >> 1;
}
else y >>= 1; while(m >>= 2);
return y;
}
到此完成,结果如下:
auto a = sqrt32(100); // a = 10
auto b = sqrt32(107); // b = 10,向下取整
auto c = sqrt32(-1); // c = 65535,最大输入及最大结果