在很多特定场合,一些硬件可能不允许使用一些高等计算函数,如开根号,幂计算等。这时候就要自己写这些函数。一般都是用一些逼近方法来求取一个逼近值代替。下面就是两种自己写的求开根号的方法。 方法1 : short HWR_sqrt_16(unsigned short M){ short N, i; short tmp, ttp; if (M == 0) return 0; else if (M < 4) return 1; else if (M < 9) return 2; else if (M < 16) return 3; else if (M < 25) return 4; else if (M < 36) return 5; else { N = 0; tmp = (M >> 14); M <<= 2; if (tmp > 1){ N ++; /* tmp -= N; */ tmp = tmp - N; } for (i=7; i>0; i--){ N <<= 1; tmp <<= 2; tmp += (M >> 14); ttp = N; ttp = (ttp<<1)+1; M <<= 2; if (tmp >= ttp){ /* tmp -= ttp;*/ tmp =tmp - ttp; N ++; } } return N; }} 方法二: #include<stdio.h> #include<stdlib.h> float sqrt_fun(float inNum) { float x, gap,term=0.0000001; for(x=1;x*x<=inNum;x++); gap=x*x-inNum; while(gap>=term) { x=(gap+2*inNum)/(2*x);//牛頓法 gap=x*x-inNum; } return x; } void main(){ float a,b; printf("請輸入:"); scanf("%f",&a); b = sqrt_fun( a ); printf("%f\n",b); } 希望大家能够将自己写的其他的一些数学函数程序能共享出来,以方便大家使用。

评论