Çok Büyük Sayıdan Büyük Küçük Tamsayı

Çok büyük bir sayıdan daha büyük bir tamsayı bulmaya çalışıyorum (örneğin exp (5000000)). Bunu yapmak için nasıl giderim? Eğer programsal olarak değilse (bu MATLAB'da veya hesaplamamda sonsuzluk veya taşma olarak değerlendirildiğinden), o zaman matematiksel olarak mı? (Zaten exp çalıştı (kat (log (exp (5000 * 1024)))) ama bu sadece sonsuzluk verecektir.

4
sadece bu sayı ne kadar büyük bir fikir vermek için, Simgesel Araç Kutusu ile MATLAB'da aşağıdakileri denedim: ceil (sym ('exp (5000000)')) sonuç çok büyük: pastebin.com/BXDbPydL
katma yazar Amro, kaynak
Evet. Yaklaşık 2,17 milyon haneli. Muazzam.
katma yazar user85109, kaynak
matematiksel olarak bulmakla tam olarak ne demek istiyorsun? Örneğin, ondalık rakamını veren bir işlev mi arıyorsunuz?
katma yazar vlsd, kaynak
Sayının büyüklüğünün neden bir sorun olduğunu anlamıyorum. Tek bir rakam yazmak için bir bayt kullansak bile, bu sayıyı içeren dosya hala 3Mb'den büyük olamaz.
katma yazar vlsd, kaynak

4 cevap

Sembolik Matematik Araç Kutusu gibi değişken hassasiyetli aritmetik sağlamak için ve tavan işlevi .

3
katma

Klas sais gibi. Eğer i N değerini alırsanız, en küçük büyük tamsayı N + 1 olur. Bunu örneğin C kullanarak hesaplamak için,

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

uzun taşmadığından emin olmak için

#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
katma

Çok sayıdaki tüm rakamları hesaplamak istiyorsanız, en kolay çözüm muhtemelen Maple veya Mathematica'yı kullanmaktır. Basit ve ücretsiz bir şey istiyorsanız, Wolfram Alpha 'yı kullanabilirsiniz.

Örneğin:

2
katma

Büyük sayıları işleyen bir kütüphane kullanmanız gerekiyor.

Google karmam Sembolik Matematik Araç Kutusuna işaret ediyor gibi görünüyor,

0
katma
@JustinM Haklısınız. Yanlış beyanı kaldırdım.
katma yazar Klas Lindbäck, kaynak
Ama N tam sayıdır, sayı değil. exp (5000000) mutlaka bir tam sayı olmayabilir.
katma yazar Justin M, kaynak