有趣的演算法(持續更新)
阿新 • • 發佈:2018-12-11
返回二進位制中1的個數
size_t countOf1(int num)
{
size_t count=0;
while(num)
{
num&=num-1;
++count;
}
return count;
}
返回比x大的2的冪級數:
int pow2gt (int x) { --x; x|=x>>1; x|=x>>2; x|=x>>4; x|=x>>8; x|=x>>16; return x+1; }
時間複雜度為O(1)的浮點數開平方根演算法:
float SqrtByCarmack( float number ) { int i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( int * ) &y; i = 0x5f375a86 - ( i >> 1 ); y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); y = y * ( threehalfs - ( x2 * y * y ) ); y = y * ( threehalfs - ( x2 * y * y ) ); return number*y; }