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

XGuru's Blog

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

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

公告





twitter / xoXGuru

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

常用鏈接

留言簿(12)

搜索

  •  

最新評(píng)論

閱讀排行榜

by Xguru

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

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ì)算階乘那么我寧愿換人。”
使用遞歸求階乘速度緩慢,無(wú)法預(yù)測(cè)運(yùn)行期間內(nèi)存使用情況,難以理解。于是你把遞歸改成了循環(huán)語(yǔ)句。

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

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

          在我的32位環(huán)境上測(cè)試一下,計(jì)算到33!的時(shí)候的溢出了,于是你會(huì)說,這是int的值太小了嘛,于是你換了個(gè)long double,測(cè)試一下,什么玩意嘛這是,數(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;
}

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

       你在這個(gè)時(shí)候是不是感覺輕飄飄了呢?請(qǐng)暫時(shí)打住。

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

                                     

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

斯特靈級(jí)數(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:級(jí)數(shù)的和  item:級(jí)數(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;
}

 

      下面這個(gè)是階乘的對(duì)數(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ù)也是特別簡(jiǎn)單

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

       這個(gè)求出來的是位數(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));
}


到此,你會(huì)不由感嘆:計(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) 評(píng)論(4)  編輯 收藏 引用

Feedback

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

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

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

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

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


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(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>
            亚洲人午夜精品免费| 欧美sm视频| 蜜臀a∨国产成人精品 | 欧美理论大片| 欧美大片在线看| 欧美精品激情在线| 欧美色123| 国产精品综合不卡av| 国产日韩欧美在线观看| 红桃视频一区| 亚洲每日在线| 亚洲影视在线| 久久久久免费观看| 亚洲电影免费| 中文精品视频一区二区在线观看| 亚洲视频精选| 久久久久久午夜| 欧美国产视频日韩| 国产乱码精品一区二区三区不卡| 黄色另类av| 99热在线精品观看| 欧美在线综合| 最新高清无码专区| 欧美一区2区三区4区公司二百| 久久免费午夜影院| 欧美系列电影免费观看| 国产视频观看一区| 日韩视频一区二区三区在线播放免费观看| 亚洲丝袜av一区| 麻豆9191精品国产| 亚洲午夜一级| 欧美极品色图| 一区二区在线看| 亚洲男同1069视频| 亚洲国产欧美国产综合一区 | 久久精品官网| 国产精品黄色在线观看| 91久久精品国产91性色tv| 午夜精品久久| 亚洲免费观看在线观看| 久久人人超碰| 精品av久久久久电影| 午夜久久美女| 一本色道久久综合狠狠躁篇的优点| 久久女同互慰一区二区三区| 国产欧美va欧美va香蕉在| 99国产精品国产精品久久| 久久伊人免费视频| 欧美一区二区三区另类| 欧美午夜视频一区二区| 日韩视频在线观看国产| 欧美高清在线一区| 久久伊人精品天天| 精品51国产黑色丝袜高跟鞋| 欧美一区在线看| 亚洲视频高清| 亚洲精品中文在线| 美女爽到呻吟久久久久| 永久免费精品影视网站| 久久精品国产999大香线蕉| 制服丝袜激情欧洲亚洲| 欧美视频在线一区二区三区| 一区二区三区欧美日韩| 亚洲精品一区二区三区av| 欧美国产三区| 亚洲性xxxx| 亚洲午夜一区二区三区| 国产精品二区二区三区| 亚洲欧美国产视频| 亚洲免费在线| 黑人极品videos精品欧美裸| 噜噜噜在线观看免费视频日韩| 久久精品午夜| 亚洲欧洲在线一区| 99av国产精品欲麻豆| 欧美性色aⅴ视频一区日韩精品| 亚洲男女自偷自拍| 欧美亚洲视频| 亚洲级视频在线观看免费1级| 亚洲经典视频在线观看| 欧美日韩一区二区在线视频| 亚洲欧美一区二区三区在线| 欧美一级网站| 亚洲精品九九| 亚洲影视在线播放| 在线观看91久久久久久| 亚洲精品国产精品乱码不99按摩 | 欧美日韩一级大片网址| 亚洲在线视频免费观看| 欧美一区=区| 亚洲日韩第九十九页| 一本久久青青| 在线成人性视频| 亚洲国产精品久久久久秋霞不卡| 欧美日韩精品伦理作品在线免费观看| 亚洲欧美伊人| 欧美国产一区视频在线观看| 亚洲欧美日韩精品一区二区| 久久久久国产一区二区三区四区| 日韩亚洲欧美成人| 欧美一区二区三区啪啪| 夜夜嗨av一区二区三区四季av| 亚洲欧美日韩精品久久久久| 亚洲第一区色| 欧美一区二区在线免费观看| 亚洲九九九在线观看| 亚洲欧美成人一区二区在线电影 | 麻豆9191精品国产| 国产精品成人一区二区网站软件| 欧美不卡在线视频| 国产婷婷精品| 在线亚洲电影| 亚洲欧美日韩在线综合| 久久一区二区精品| 香蕉乱码成人久久天堂爱免费| 久久久久久久久综合| 性伦欧美刺激片在线观看| 欧美精品一区三区| 欧美黑人在线观看| 狠狠网亚洲精品| 欧美一二区视频| 亚洲欧美一区二区激情| 欧美日韩一区成人| 亚洲国产三级| 91久久亚洲| 美女主播精品视频一二三四| 久久精品国产第一区二区三区最新章节| 欧美日韩精品是欧美日韩精品| 女人色偷偷aa久久天堂| 国内精品久久久久久久果冻传媒| 亚洲一区免费视频| 亚洲欧美综合v| 国产精品久久久久一区二区三区共| 91久久国产精品91久久性色| 亚洲激情另类| 欧美巨乳在线| 亚洲美女中文字幕| 亚洲一区二区三区在线视频| 欧美理论片在线观看| 亚洲激情欧美| 在线视频亚洲| 国产精品久久久久一区二区三区共 | 亚洲国产一区二区在线| 亚洲国产高清aⅴ视频| 久久亚洲视频| 亚洲国产mv| 中文高清一区| 国产欧美高清| 久久婷婷蜜乳一本欲蜜臀| 免费不卡欧美自拍视频| 亚洲激情视频在线| 欧美日韩福利| 亚洲欧美日韩一区在线| 久久激情综合| 亚洲大片一区二区三区| 美国十次成人| 亚洲精品系列| 欧美自拍丝袜亚洲| 亚洲高清色综合| 欧美人与禽猛交乱配视频| 一本大道久久a久久精品综合| 午夜在线精品| 亚洲成人自拍视频| 欧美三级免费| 久久精品国产2020观看福利| 欧美福利视频网站| 亚洲在线成人| 伊人久久大香线蕉av超碰演员| 欧美高清自拍一区| 亚洲一区二区三区影院| 美国十次了思思久久精品导航| 亚洲精品一区二区在线观看| 国产精品a久久久久| 久久激五月天综合精品| 91久久国产综合久久蜜月精品| 欧美亚洲视频在线看网址| 性欧美1819sex性高清| 亚洲国产精品精华液网站| 亚洲精品影视| 久久久亚洲午夜电影| av72成人在线| 国自产拍偷拍福利精品免费一| 欧美国产专区| 久久xxxx| 欧美精品www在线观看| 亚洲国产影院| 久久精品欧洲| 亚洲小视频在线观看| 狠狠色狠狠色综合日日tαg | 免费久久99精品国产自| 亚洲欧美日韩国产一区| 最新日韩在线视频| 久久久综合精品| 亚洲欧美国产高清| 日韩午夜免费视频| 亚洲电影免费观看高清| 国产在线精品二区| 国产精品视频久久久| 欧美精品在线极品| 欧美高清免费|