float spx_sqrtf(float arg) { if(arg==1.0) return 1.0; } spx_word32_t spx_sqrt(spx_word32_t x) { //printf("SQRT:%d",x); int k=0; spx_word32_t rt; if (x==0){ //printf("=%d\n",0); return 0; } #if 1 if (x>16777216) { x>>=10; k+=5; } if (x>1048576) { x>>=6; k+=3; } if (x>262144) { x>>=4; k+=2; } if (x>32768) { x>>=2; k+=1; } if (x>16384) { x>>=2; k+=1; } #else while (x>16384) { x>>=2; k++; } #endif while (x<4096) { x<<=2; k--; } rt = ADD16(C0, MULT16_16_Q14(x, ADD16(C1, MULT16_16_Q14(x, ADD16(C2, MULT16_16_Q14(x, (C3))))))); if (k>0) rt <<= k; else rt >>= -k; rt >>=7; //printf("=%d\n",rt); return rt; }