2011-10-28 52 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; 
}