91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

首次公布:超級開方代碼

這里給出兩個最快速的開平方函數C語言代碼,原理已經在相關文章里有敘述:


// 兩個2字節開方程序


unsigned char a,b,p=0x80;
unsigned int K,A,B,C,R=0x4000,D=60000;


  void main()
  {
  sqt1();
  B=A=0;R=0x4000;  //恢復數據
  sqt2();
  }



sqt1(){
do{
   b=a-p;B=C;B>>=1;
   if(A){K=A;K>>=1;}
     else K=0x8000;   //補碼
   B+=K;B-=R;
   if(D>B)C=B;
     else{A=B;a=b;}
   p>>=1;R>>=2;
}while(p!=1);              //循環7次
   p=(A-C)>>2;A-=p; C+=p;   //小數處理
   b=a;
   if(D   if(D}        



sqt2(){
do{
   A=B+R;B>>=1;
   if(A<=D){
     D-=A;B+=R;}
   R>>=2;
}while(R);     //循環7次
if(D>B)B++;    //小數處理

}



其中,D為被開方數,,b為sqt1()的根,B為sqt2()的根.
兩個函數精度一樣,都是小數部分嚴格四舍五入,速度sqt2()更快一點(約300個指令周期).

R為計算初始參數(p為其平方根---僅為sqt1()使用),其意義見相關文章,取值根據被開方數最大值確定:

被開方數D      R(16進制)      
2字節16位      0x4000        
          18位      0x10000      
          20位      0x40000      
          22位      0x100000    
3字節24位      0x400000    
4字節32位      0x40000000    
......以此類推.
即:R與D長度相同時,次高位為1,其余為0.
全部回復(4)
正序查看
倒序查看
52919801
LV.6
2
2007-02-28 16:30
不錯!加分
0
回復
da2007
LV.2
3
2007-02-28 20:40
好樣的!!
   :)!!!
0
回復
sdjufeng
LV.6
4
2007-03-02 13:34
既然用了C51,何不用系統自帶的開方功能呢?
0
回復
nc965
LV.6
5
2007-03-03 11:12
@sdjufeng
既然用了C51,何不用系統自帶的開方功能呢?
速度,空間都有數量級的差別
0
回復
主站蜘蛛池模板: 德庆县| 报价| 古蔺县| 新安县| 齐河县| 孝感市| 长宁区| 林西县| 濮阳市| 德安县| 长治县| 襄垣县| 六枝特区| 海丰县| 秭归县| 晋宁县| 方城县| 行唐县| 宣恩县| 伊吾县| 鄢陵县| 沙坪坝区| 淮安市| 沧州市| 明光市| 郓城县| 松滋市| 铁力市| 辽源市| 卢湾区| SHOW| 玉田县| 荆州市| 文化| 洞口县| 麻江县| 苗栗县| 宜君县| 长白| 麻江县| 筠连县|