#include "my_math.h" uint16_t sqrt_u16(uint32_t value) { uint32_t rem = 0; uint32_t sqrt_value = 0; uint32_t divisor = 0; for(int i = 0; i < 16; i++) { sqrt_value <<= 1; rem = ((rem << 2) + (value >> 30)); value <<= 2; divisor = (sqrt_value << 1) + 1; if(divisor <= rem) { rem -= divisor; sqrt_value++; } } return (uint16_t)sqrt_value; } uint32_t sqrt_u32(uint64_t value) { uint32_t sqrt_value; uint64_t temp,ttp; //结果、循环计数 if(value == 0) //被开方数,开方结果也为0 { return 0; } sqrt_value = 0; temp = (value >> 30); //获取最高位 temp <<= 2; if(temp > 1) //最高位为1 { sqrt_value++; //结果当前位为1,否则为默认的0 temp -= sqrt_value; } for(int i = 15; i > 0; i--) //求剩余的15位 { sqrt_value <<= 1; //左移一位 temp <<= 2; temp += (value >> 30); //假设 ttp = sqrt_value; ttp = (ttp << 1) + 1; value <<= 2; if(temp >= ttp) //假设成立 { temp -= ttp; sqrt_value++; } } return sqrt_value; } int16_t No_MaxMin_Average_short(int16_t *dest,uint32_t size) { int16_t min,max; int32_t value = 0; uint32_t i = 0; min = dest[0]; max = dest[0]; for(i = 1; i < size; i++) { if(dest[i] < min) { min = dest[i]; } if(dest[i] > max) { max = dest[i]; } } for(i = 0; i < size; i++) { value += dest[i]; } value = value - min - max; value /= (size - 2); return (int16_t)value; } int16_t Average_short(int16_t *dest,uint32_t size) { int32_t value = 0; uint32_t i = 0; if(size == 1) { return *dest; } for(i = 0; i < size; i++) { value += dest[i]; } value /= size; return (int16_t)value; } float Average_float(float *dest,uint32_t size) { float value = 0; if(size == 1) { return *dest; } value = dest[0]; for(int i = 1; i < size; i++) { value += dest[i]; value /= 2.0; } return value; } bool get_MaxMinValue(int16_t *max,int16_t *min,int16_t *value,uint32_t size) { if(size < 2) { return false; } *max = *value; *min = *value++; size--; while(size--) { if(*value < *min) { *min = *value; } else if(*value > *max) { *max = *value; } value++; } return true; } int get_MaxFloatArray(float *max,float *array,int count) { int idx = 0; for(int i = 0; i < count; i++) { if(*max < array[i]) { *max = array[i]; idx = i; } } return idx; } float get_float_Variance_Sum(float *value,int len) { float var = 0; float sum = 0; for(int i = 0; i < len; i++) { var += value[i]; } var /= len; for(int i=0;i='0' && c<='9') { decNum = c - 48; } else if(c>='a' && c<='z') { decNum = c - 87; } else if(c>='A' && c<='Z') { decNum = c - 29; } return decNum; } //将十进制转换为这些字符 [0-9a-zA-Z],61个字符,最大表示62进制 char Base62_convertFromDec(int c) { char objchar; if(c>=0 && c<=9) objchar=c+48; else if(c>=10 && c<=35) objchar=c+87; else if(c>=36 && c<=61) objchar=c+29; return objchar; }