2011-10-28 57 views
-4

我試圖找到大於一個非常大的數的最小整數(例如,exp(5000000))。我會如何去做這件事?如果不是以編程方式(因爲它在MATLAB或我的計算器中評估爲無窮大或溢出),那麼數學? (已經嘗試過exp(floor(log(exp(5000 * 1024)))),但這隻會給無窮大)。最小的整數大於非常大的數

+0

你到底通過數學發現它是什麼意思?例如,你在尋找一個給出第n位數的函數嗎? – vlsd

+0

只是爲了讓你知道這個數字有多大,我在符號工具箱中用MATLAB試過以下代碼:'ceil(sym('exp(5000000)'))'結果是巨大的:http://pastebin.com/BXDbPydL – Amro

+1

是的。它大約有217萬位數字。巨大。 – 2011-10-28 22:04:51

回答

0

您需要使用處理大數字的庫。

我的谷歌人緣似乎指向Symbolic Math Toolbox

+2

但是N是整數,而不是數字。 exp(5000000)可能不一定是整數。 –

+0

@JustinM你是對的。我已刪除不正確的語句。 –

-2

像克拉斯賽斯。如果您整數i N那麼最小的較大整數是N + 1。要計算此使用,例如C,你可以寫出這樣

unsigned long smallestLargerInteger(unsigned long startNum) { 
    return startNum +1; 
} 

功能要確保你不溢出你可以有像

#define __HALF_MAX_SIGNED(type) ((type)1 << (sizeof(type)*8-2)) 
#define __MAX_SIGNED(type) (__HALF_MAX_SIGNED(type) - 1 + __HALF_MAX_SIGNED(type)) 
#define __MIN_SIGNED(type) (-1 - __MAX_SIGNED(type)) 

#define __MIN(type) ((type)-1 < 1?__MIN_SIGNED(type):(type)0) 
#define __MAX(type) ((type)~__MIN(type)) 

unsigned long smallestLargerInteger(unsigned long startNum) { 
    if(__MAX(long) == startNum) { 
    // handle overflow error messaging here 
    } 

    return startNum +1; 
}