非常に大きい整数よりも小さい最小の整数

私は、非常に大きな数値より大きい最小の整数を見つけようとしています(たとえば、exp(5000000))。これをどうやってやりますか?プログラムでない場合(これが無限大またはMATLABまたは計算機でオーバーフローするため)、数学的には? (すでにexp(floor(log(exp(5000 * 1024)))))を試してみましたが、無限大を与えます)。

4
この数字がどれほど大きいかを知るために、Symbolic Toolboxを使ってMATLABで以下のことを試しました: ceil(sym( 'exp(5000000)'))結果は膨大です。 pastebin.com/BXDbPydL
追加された 著者 Amro,
はい。それはおよそ217万桁です。巨大な。
追加された 著者 user85109,
数学的に見つけたらどういう意味ですか?例えばn番目の数字を与える関数を探していますか?
追加された 著者 vlsd,
私はなぜ数字のサイズが問題になるのか分かりません。たとえ1バイトを使用して1桁の数字を書き込んだとしても、この数字を含むファイルは3Mbより大きくはなりません。
追加された 著者 vlsd,

4 答え

シンボリック数学ツールボックスのような可変精度の算術演算を提供するものが必要な場合は、および上限​​機能を参照してください。

3
追加された

クラウス・サイスのように。整数i N の場合、最小の整数は N + 1 です。例えばCを使ってこれを計算するには、次のような関数を書くことができます。

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

あなたが long をオーバーフローさせないようにするには、

#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;
}
2
追加された

多数の数字をすべて計算したい場合は、MapleやMathematicaを使うのが一番簡単な解決策です。シンプルで無料のものだけをお望みなら、 Wolfram Alpha を使うことができます。

例えば:

2
追加された

大きな数字を処理するライブラリを使用する必要があります。

私のgoogleのカルマは、シンボリック数学ツールボックスを指しているようですが、

0
追加された
@ジャスティンあなたは正しいです。間違った文を削除しました。
追加された 著者 Klas Lindbäck,
しかし、Nは整数であり、数ではありません。 exp(5000000)は必ずしも整数でなくてもよい。
追加された 著者 Justin M,