用Stirling逼近近似計算階乘

用Stirling逼近近似計算階乘n!

1、求n!的前幾位

先看公式:

用Stirling逼近近似計算階乘
θ十分接近1,而且在逐漸地逼近1,實際上,即使是求1的階乘,θ也會達到0.9727376027,這是一個本身就是一個很“精確”的數字了!當n1000時,θ0.99999996665875876427498746773752,與1的差別只有0.000000033341241235725012532263(約等於3.33412×10-8)!

 

這樣可以推出求階乘前幾位的最後公式爲:

 

用Stirling逼近近似計算階乘

2、求位數

lg(n)+1=n的位數  (注意:lg是指以10爲底的對數)

繼而推出

用Stirling逼近近似計算階乘

 

--------------------------------------------------------------------------------------------------下面附上用C++寫的代碼:

 

#include<iostream>

#include<cmath>

using namespace std;

int fac(int n){//遞歸求階乘(很有限)

         if(n>1){

           return n*fac(n-1);

         }else{

           return n;

         }

}

 

double frac(double n){

   return n-floor(n);

}

 

int stirlingp(int n){//計算階乘結果的位數

   return floor(0.5*log10(2*n*3.1415926)+n*log10(n/exp(1.0)))+1;

}

 

double stirling(int n,int p){//計算階乘n!結果的前面(從左到右)p位

  return pow(10.0,frac(0.5*log10(2*n*3.1415926)+n*log10(n/exp(1.0))))*exp(1.0/12/n)*pow(10.0,p-1);

}

 

 

 

void main()

{

         cout<<stirling(4,1)<<"E+"<<stirlingp(4)<<endl;

         getchar();

}

--------------------------------------------------------------------------------------------------

文本公式推導源於《用Stirling逼近近似計算階乘的探討與應用》仲晨 2005年寫的一篇文章那時還是高中生,實在厲害,文本只做結果使用!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章