00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _H_SST_CORE_MATH_SQRT
00014 #define _H_SST_CORE_MATH_SQRT
00015
00016 namespace SST {
00017 namespace Math {
00018
00019
00020
00021 static inline uint32_t square_root(const uint32_t input) {
00022
00023 uint32_t op = input;
00024 uint32_t res = 0;
00025 uint32_t one = 1uL << 30;
00026
00027 while (one > op)
00028 {
00029 one >>= 2;
00030 }
00031
00032 while (one != 0)
00033 {
00034 if (op >= res + one)
00035 {
00036 op = op - (res + one);
00037 res = res + 2 * one;
00038 }
00039
00040 res >>= 1;
00041 one >>= 2;
00042 }
00043
00044 return res;
00045 };
00046
00047 }
00048 }
00049
00050 #endif