青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

XGuru's Blog

技術(shù),是一種態(tài)度。關(guān)注:高性能后端技術(shù)/服務(wù)器架構(gòu)/C++/C/LAMP

   :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  20 Posts :: 0 Stories :: 93 Comments :: 0 Trackbacks

公告





twitter / xoXGuru

feedsky
抓虾
google reader
鲜果
QQ邮箱
九点

常用鏈接

留言簿(12)

搜索

  •  

最新評論

閱讀排行榜

by Xguru

 又說階乘,這是老生常談了吧。想都不用想,一個遞歸輕松搞定!

int factorial(int n)
{
    
if( n == 1)
        
return 1;
    
return n * factorial(n-1);
}

或者你覺得遞歸效率沒有尾遞歸來的好 ,大筆一揮。

long fact_iter(long product, long counter, long maxcount) 
{      
  
return (counter > maxcount) ? product : fact_iter(product*counter, counter+1, maxcount);
}
      

long factorial(long n) 
{
  
return fact_iter(11, n);    
}

 
         或者你看過《代碼大全》上面說過:“如果為我工作的程序員用遞歸去計(jì)算階乘那么我寧愿換人。”
使用遞歸求階乘速度緩慢,無法預(yù)測運(yùn)行期間內(nèi)存使用情況,難以理解。于是你把遞歸改成了循環(huán)語句。

int factorial(int n)
{
    
int result = 1;
    
for(int i = 2 ; i <= n; i++)
    
{
        result 
= result * i;
    }

    
return result;
}
          當(dāng)你寫下這些代碼的時候,會不會覺得少了些什么?

          在我的32位環(huán)境上測試一下,計(jì)算到33!的時候的溢出了,于是你會說,這是int的值太小了嘛,于是你換了個long double,測試一下,什么玩意嘛這是,數(shù)再大一點(diǎn)的話也不行了

         
 那就改用鏈表或者數(shù)組表示吧,鏈表的速度就太慢了,用數(shù)組吧。

int factorial2(int n,int a[])

    
int carry;
    
int digit = 1;
    a[
0= 1;
    
int temp;
    
for(int i = 2; i <= n; ++i)
    
{
        
for(int j = 1, carry = 0; j <= digit; ++j)    
        
{
            temp 
= a[j-1* i + carry;
            a[j
-1= temp % 10;
            carry 
= temp / 10;
        }

        
while(carry) 
        
{
            a[
++digit-1= carry % 10;
            carry 
/= 10;
        }

    }

    
return --digit;
}

        這個算法模擬手工計(jì)算的過程,將結(jié)果保存在a數(shù)組中,返回的是結(jié)果的位數(shù)

       你在這個時候是不是感覺輕飄飄了呢?請暫時打住。

        如果我要求一個
10W以上大數(shù)的一個科學(xué)計(jì)數(shù)法的表達(dá)式呢?或者是問你,10W 級別上的N!左邊第三位的數(shù)字是多少?呃,這個是數(shù)學(xué)家的事了吧?振作精神,來挑戰(zhàn)自我吧!真正的程序員需要的就是這種追根究底的精神。
        來試試數(shù)學(xué)分析方法,James Stirling這位蘇格蘭數(shù)學(xué)家,280多年前就給出了這個極限式子

                                     

       這個式子能用極快的速度求出n!的近似值,也可以使用它來無限接近準(zhǔn)確結(jié)果。具體的介紹和證明過程在這里 或者 這里

斯特靈級數(shù)公式



      下面的代碼是求大數(shù)N!科學(xué)計(jì)數(shù)法表示

struct bigNum 
{
       
double n; //尾數(shù)
       int    e; //指數(shù)
}
;
void factorial3(struct bigNum *p,int n)
{
       
double logx,s,item;//s:級數(shù)的和  item:級數(shù)的每一項(xiàng)
       int i;
       logx 
= n* log10((double)n/E);
       p
->= (int)(logx);   p->n= pow(10.0, logx-p->e);
       p
->*= sqrt( 2* PI* (double)n);
       
for (item=1.0,s=0.0,i=0;i<sizeof(a1)/sizeof(double);i++)
       
{
              s 
+= item * a1[i];
              item 
/= (double)n;
       }

       p
->*=s;
}

 

      下面這個是階乘的對數(shù)的漸近展開式
               

void factorial3b(struct bigNum *p,int n)
{
    
double logR;
    
double s,item;
    
int i;
    logR
=0.5*log(2.0*PI)+((double)n+0.5)*log(n)-(double)n;
    
    
for (item=1/(double)n,s=0.0,i=0;i<sizeof(a2)/sizeof(double);i++)
    
{
        s
+= item * a2[i];
        item 
/= (double)(n)* (double)n; 
    }

    logR
+=s;
    p
->= (int)( logR / log(10));//換底公式
    p->= pow(10.00, logR/log(10- p->e);
}

       要是求階層的位數(shù)也是特別簡單

double getFactorialLength(int n)
{
    
return (n * log(double(n)) - n + 0.5 * log(2.0 * n * PI )) / log(10.0)+1;
}

       這個求出來的是位數(shù)的近似數(shù),或者是改進(jìn)一下,使用ceil函數(shù)來求出不小于給定實(shí)數(shù)的最小整數(shù)。

int getFactorialLength(int n)
{
    
if( n == 1 )
        
return 1;
    
else
    
return (int)ceil((N*log(N)-N+log(2*N*PI)/2)/log(10));
}


到此,你會不由感嘆:計(jì)算機(jī)科學(xué)中最閃光,最精髓,最本質(zhì)的東西還是數(shù)學(xué)



芒德布羅集合的邊界
最后用羅素的話結(jié)束這篇隨筆:
       Mathematics, rightly viewed, possesses not only truth, but supreme beauty — a beauty cold and austere, like that of sculpture, without appeal to any part of our weaker nature, without the gorgeous trappings of painting or music, yet sublimely pure, and capable of a stern perfection such as only the greatest art can show. The true spirit of delight, the exaltation, the sense of being more than Man, which is the touchstone of the highest excellence, is to be found in mathematics as surely as poetry.

 

參考資料
1.Tom M. Apostol.《數(shù)學(xué)分析, 微積分》(Mathematical Analysis)
2.Steve McConnell.《代碼大全(第二版)》(CODE COMPLETE, Second Edition)
3.http://en.wikipedia.org/wiki/Stirling_approximation#History

4.
http://mathworld.wolfram.com/StirlingsApproximation.html

5.
http://zh.straightworldbank.com/wiki/%E6%96%AF%E7%89%B9%E6%9E%97%E5%85%AC%E5%BC%8F

 

posted on 2009-12-30 19:02 XGuru 閱讀(1919) 評論(4)  編輯 收藏 引用

Feedback

# re: 雜感系列之二--階乘算法雜感 2009-12-30 22:55 NighCrawler
最后的那張分形幾何圖是軟件生成的?  回復(fù)  更多評論
  

# re: 雜感系列之二--階乘算法雜感 2010-01-05 18:24 argmax
Stirling公式只是一個近似,當(dāng)n較大時才比較接近原始的結(jié)果。  回復(fù)  更多評論
  

# re: 雜感系列之二--階乘算法雜感[未登錄] 2010-04-02 17:34 Mingle
文章中的數(shù)學(xué)公式是如何書寫的?  回復(fù)  更多評論
  

# re: 雜感系列之二--階乘算法雜感[未登錄] 2010-04-06 22:37 xguru
@Mingle
latex公式常用宏包 http://www.ctex.org/documents/packages/math/index.htm

還有 word2007的公式生成也不錯呢
  回復(fù)  更多評論
  


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产日韩一区二区| 麻豆九一精品爱看视频在线观看免费| 国产精品ⅴa在线观看h| 欧美激情一区二区三区蜜桃视频| 免费不卡中文字幕视频| 久久在线视频在线| 美女日韩欧美| 欧美人在线观看| 久久久精品性| 极品日韩久久| 激情欧美亚洲| 99riav久久精品riav| 亚洲欧美影院| 夜夜爽99久久国产综合精品女不卡 | 亚洲视频免费看| 一区二区电影免费在线观看| 亚洲尤物在线| 久久亚洲一区二区| 欧美色区777第一页| 国产主播精品在线| 日韩视频免费观看高清在线视频 | 1000部精品久久久久久久久 | 免费欧美电影| av成人免费在线| 久久国产加勒比精品无码| 美国成人直播| 国产精品色网| 日韩一区二区精品| 久久精品免费播放| 亚洲日本中文字幕区| 艳女tv在线观看国产一区| 亚洲欧美一区二区原创| 欧美精品一区在线| 国产亚洲欧美日韩日本| 夜夜躁日日躁狠狠久久88av| 老司机成人网| 性欧美大战久久久久久久免费观看| 美女成人午夜| 国产综合亚洲精品一区二| 亚洲欧美日韩精品在线| 亚洲精品日韩激情在线电影| 久久中文字幕导航| 狠狠爱www人成狠狠爱综合网| 亚洲欧美日韩国产综合在线 | 久久久久久久久久久久久久一区| 亚洲黄色免费电影| 久久精品毛片| 国产日本欧美一区二区三区在线 | 一本色道**综合亚洲精品蜜桃冫 | 欧美伊人精品成人久久综合97| 91久久精品日日躁夜夜躁国产| 久久久久高清| 日韩视频一区二区三区| 欧美一区=区| 欧美精品一区二区三区很污很色的| 国产欧美日韩三区| 亚洲少妇在线| 亚洲日本中文字幕| 欧美国产另类| 亚洲乱码国产乱码精品精可以看 | 黄色欧美成人| 久久精品视频网| 翔田千里一区二区| 国产日韩欧美不卡在线| 欧美专区中文字幕| 欧美一级免费视频| 国模大胆一区二区三区| 久久综合久色欧美综合狠狠 | 国产精品久久毛片a| 中日韩高清电影网| 在线综合亚洲| 国产视频一区欧美| 久久一区激情| 欧美成人免费在线| 中文国产一区| 亚洲免费影视| 激情小说亚洲一区| 亚洲国产日韩欧美在线动漫| 欧美日韩国产一级片| 午夜伦理片一区| 久久九九免费视频| 亚洲日韩中文字幕在线播放| 亚洲精品字幕| 国产欧美日韩精品在线| 免费成人高清| 欧美日韩亚洲综合在线| 久久精品导航| 欧美成人资源| 欧美在线视频二区| 男女精品网站| 欧美一区二区播放| 在线观看一区二区精品视频| 亚洲激情一区| 国产视频一区二区三区在线观看| 美日韩精品免费观看视频| 欧美日产一区二区三区在线观看| 欧美一区日本一区韩国一区| 免费日韩视频| 久久国产精品一区二区三区四区| 欧美成人第一页| 久久精品国产精品| 欧美日韩视频专区在线播放| 免费在线亚洲欧美| 国产区精品视频| 一区二区精品国产| 亚洲精品中文字幕在线观看| 久久国产精品网站| 午夜精品视频在线观看| 欧美精品国产精品日韩精品| 美女久久网站| 亚洲精品一二区| 欧美一级视频一区二区| 亚洲精品在线视频| 久久国产精品毛片| 亚洲欧美中文另类| 欧美国产精品久久| 免费观看成人www动漫视频| 欧美视频在线观看 亚洲欧| 久久中文欧美| 国产午夜精品久久久久久免费视 | 久久综合给合久久狠狠色| 校园春色国产精品| 欧美精品三级| 欧美激情视频在线播放| 精品av久久久久电影| 性一交一乱一区二区洋洋av| 亚洲午夜小视频| 欧美日韩成人在线观看| 亚洲国产另类 国产精品国产免费| 国产一区二区你懂的| 午夜亚洲伦理| 久久精品国产2020观看福利| 国产欧美激情| 午夜一区在线| 久久人人爽人人| 国产一区日韩二区欧美三区| 午夜国产不卡在线观看视频| 欧美在线|欧美| 国产伦精品一区二区三区高清版| 亚洲性xxxx| 欧美专区在线| 极品少妇一区二区| 欧美成人午夜视频| 亚洲黄色在线视频| 99精品视频免费全部在线| 欧美久久久久久| 亚洲国内精品| 亚洲午夜视频在线观看| 国产精品综合久久久| 亚洲欧美日韩综合| 乱中年女人伦av一区二区| 亚洲国产导航| 欧美日韩xxxxx| 在线视频精品一| 欧美一进一出视频| 国模一区二区三区| 欧美成人亚洲成人| 9色porny自拍视频一区二区| 午夜亚洲福利| 精品成人免费| 欧美精品激情在线| 亚洲免费视频成人| 欧美激情中文不卡| 亚洲欧美日韩中文在线制服| 激情亚洲网站| 国产精品盗摄一区二区三区| 欧美伊久线香蕉线新在线| 欧美国产亚洲精品久久久8v| 一本色道久久综合狠狠躁篇的优点 | 艳女tv在线观看国产一区| 欧美一区三区二区在线观看| 一区在线视频观看| 欧美日韩精品免费观看| 欧美在线视频免费观看| 亚洲国产视频直播| 国产精品va在线| 老牛国产精品一区的观看方式| 亚洲精品国产日韩| 国产精品久久久久婷婷| 久久视频一区二区| 一本色道久久88亚洲综合88| 久久久夜精品| 亚洲综合精品四区| 亚洲精品国产视频| 国内久久婷婷综合| 国产精品成人aaaaa网站| 久久人人爽国产| 午夜亚洲激情| 亚洲手机在线| 亚洲国产三级网| 久久综合久久综合久久| 亚洲欧美激情视频| 日韩一级片网址| 亚洲国产综合视频在线观看| 国产精品女主播| 欧美激情在线观看| 农夫在线精品视频免费观看| 久久se精品一区精品二区| 亚洲午夜一二三区视频| 91久久精品日日躁夜夜躁国产|