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

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>
            免费成人美女女| 亚洲经典一区| 亚洲高清在线| 亚洲图片欧洲图片av| 亚洲欧美日韩综合aⅴ视频| 欧美一级网站| 亚洲国产欧美精品| 亚洲欧美在线另类| 欧美日本视频在线| 亚洲第一区在线| 欧美一区二区在线播放| 亚洲欧洲日本在线| 久久久青草婷婷精品综合日韩| 午夜欧美精品| 美女图片一区二区| 亚洲欧美国产不卡| 欧美精品在线视频| 亚洲国产日韩欧美一区二区三区| 国产精品高潮呻吟视频| 亚洲人成在线播放| 久久男女视频| 午夜精品三级视频福利| 国产欧美在线视频| 亚洲欧美日韩国产精品| 亚洲精品1234| 欧美日韩中文字幕精品| 日韩亚洲精品电影| 亚洲最新中文字幕| 欧美另类人妖| 狂野欧美激情性xxxx欧美| 尤物九九久久国产精品的特点 | 鲁大师成人一区二区三区| 一区二区高清| 国产伦精品一区二区三区高清| 国产精品欧美激情| 久久国产视频网| 久久久久久伊人| 一片黄亚洲嫩模| 亚洲视频狠狠| 韩日精品视频一区| 亚洲人成在线播放| 国产精品日韩欧美大师| 久久综合九色| 欧美三级黄美女| 久久久久国产精品人| 欧美久久成人| 麻豆九一精品爱看视频在线观看免费| 久久精品国产69国产精品亚洲| 免费观看久久久4p| av成人免费观看| 国产精品捆绑调教| 欧美成人午夜77777| 国产亚洲在线| 久久精品91| 免费欧美在线| 亚洲三级电影全部在线观看高清| 欧美中文字幕在线| 久久久久久久综合日本| 日韩亚洲国产欧美| 久久久精品动漫| 一区二区久久| 久久国产精品亚洲77777| 日韩午夜剧场| 欧美专区中文字幕| 亚洲伊人网站| 欧美国内亚洲| 另类欧美日韩国产在线| 欧美视频二区| 亚洲精品日韩精品| 亚洲国产成人精品久久| 午夜日韩激情| 亚洲一区免费在线观看| 麻豆乱码国产一区二区三区| 欧美自拍丝袜亚洲| 国产精品久久久久久久久免费樱桃 | 亚洲永久在线观看| 欧美成人精品福利| 欧美成人午夜剧场免费观看| 一区二区视频免费完整版观看| 久久伊人亚洲| 国产一区二区三区丝袜| 久久综合久久综合九色| 欧美国产激情二区三区| 日韩一级网站| 国产精品热久久久久夜色精品三区| 久久精品欧洲| 亚洲精品系列| 国产精品色网| 翔田千里一区二区| 亚洲国产精品久久人人爱蜜臀| 欧美三级电影精品| 久久se精品一区精品二区| 欧美福利一区二区| 一区二区三区国产盗摄| 国产九色精品成人porny| 久久久视频精品| 亚洲视频 欧洲视频| 免费在线亚洲| 久久精品一本| 亚洲特级片在线| 日韩网站在线观看| 亚洲国产精品综合| 在线观看国产欧美| 在线观看久久av| 在线观看日产精品| 亚洲精品一区在线观看| 欧美激情1区2区| 性高湖久久久久久久久| 国产精品高潮呻吟久久av无限| 亚洲国产精品尤物yw在线观看| 亚洲激情第一区| 老鸭窝亚洲一区二区三区| 亚洲美女区一区| 一本不卡影院| 欧美欧美全黄| 美女999久久久精品视频| 久久久久久香蕉网| 欧美国产亚洲另类动漫| 欧美日韩三级| 狠狠色狠狠色综合日日小说| 伊人久久亚洲热| 夜夜夜久久久| 久久久免费精品视频| 亚洲承认在线| 亚洲欧美大片| 欧美成人中文| 国内偷自视频区视频综合| 国产色综合久久| 欧美一区二区三区另类| 一本色道久久88综合亚洲精品ⅰ| 国产一区二区三区在线观看视频 | 日韩亚洲一区二区| 久久久97精品| 亚洲欧洲一区二区在线观看| 欧美日韩国产色站一区二区三区| 一区二区三区视频在线| 国产精品久久久久久妇女6080| 日韩午夜电影| 欧美大片免费| 快she精品国产999| 欧美国产精品久久| 亚洲色图综合久久| 欧美午夜久久| 久久精品最新地址| 一区二区三区四区蜜桃| 亚洲国产精品精华液2区45| 伊人久久大香线| 91久久视频| 亚洲美女精品成人在线视频| 国产欧美一区视频| 欧美日韩一区二区三| 国产精品入口日韩视频大尺度| 欧美成人日韩| 亚洲欧洲一区二区三区在线观看| 在线高清一区| 亚洲成在线观看| 欧美精品乱码久久久久久按摩 | 亚洲精品国偷自产在线99热| 久久精品亚洲精品国产欧美kt∨| 久久精品国产欧美亚洲人人爽| 久久国产精品一区二区| 国产性做久久久久久| 久久久久久久久久久久久9999| 亚洲另类在线一区| 久久全国免费视频| 亚洲一二三级电影| 欧美成人蜜桃| 中文在线资源观看网站视频免费不卡| 欧美午夜在线一二页| 欧美精品一区二区三区很污很色的| 久久午夜色播影院免费高清| 裸体素人女欧美日韩| 欧美成人精品在线播放| 亚洲国产精品一区二区第一页| 在线视频欧美日韩| 欧美亚洲一区二区在线| 欧美成人xxx| 欧美精品成人一区二区在线观看 | 午夜精品久久久久久久男人的天堂| 亚洲精品视频在线看| 欧美视频在线免费| 午夜精品一区二区三区在线| 亚洲男人的天堂在线aⅴ视频| 亚洲欧美一区二区三区在线| 很黄很黄激情成人| 亚洲国产你懂的| 欧美日韩一区二区国产| 香蕉精品999视频一区二区| 久久精品首页| 亚洲一区二区影院| 久久婷婷国产麻豆91天堂| 99精品国产热久久91蜜凸| 欧美一区二区三区在线观看视频| 鲁鲁狠狠狠7777一区二区| 在线视频你懂得一区| 久久久午夜精品| 亚洲欧美电影院| 久久人人97超碰精品888| 午夜精品成人在线| 欧美日本国产一区|