Cel mai mic număr întreg mai mare decât numărul foarte mare

Încerc să găsesc cel mai mic număr întreg mai mare decât un număr foarte mare (de exemplu, exp (5000000)). Cum aș face asta? Dacă nu este programabil (pentru că acest lucru este evaluat la infinit sau de preaplin în MATLAB sau calculatorul meu), apoi matematic? (Ați încercat deja exp (etajul (log (exp (5000 * 1024)))) dar care va da doar infinit).

4
doar pentru a vă da o idee cât de mare este acest număr, am încercat următoarele în MATLAB cu Simbolic Toolbox: ceil (sim ('exp (5000000)')) rezultatul este enorm: pastebin.com/BXDbPydL
adăugat autor Amro, sursa
Da. Are aproximativ 2,17 milioane de cifre. Enorm.
adăugat autor user85109, sursa
exact ce vrei să spui prin găsirea ei matematic? esti in cautarea unei functii care sa dea a cincea cifra, de exemplu?
adăugat autor vlsd, sursa
Nu văd de ce dimensiunea numărului ar trebui să fie o problemă. Chiar dacă se utilizează un octet întreg pentru a scrie o singură cifră, fișierul care conține acest număr nu va mai fi mai mare de 3Mb.
adăugat autor vlsd, sursa

4 răspunsuri

Vrei ceva care să furnizeze aritmetică cu precizie variabilă, cum ar fi Simbolic Math Toolbox , și funcție tavan .

3
adăugat

Ca și Klas sais. Dacă numerele întregi N atunci cel mai mic număr întreg este N + 1 . Pentru a calcula acest lucru folosind, de exemplu, C puteți scrie o funcție ca

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

Pentru a vă asigura că nu exagerați cu lungul , puteți avea ceva asemănător

#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
adăugat

Dacă doriți să calculați toate cifrele unui număr mare, cea mai simplă soluție este probabil să utilizați Maple sau Mathematica. Dacă doriți doar ceva simplu și gratuit, puteți utiliza Wolfram Alpha .

De exemplu:

2
adăugat

Trebuie să utilizați o bibliotecă care gestionează numerele mari.

Karma mea Google pare să indice Toolbox Math Symbolic ,

0
adăugat
@JustinM Ai dreptate. Am eliminat declarația incorectă.
adăugat autor Klas Lindbäck, sursa
Dar N este întregul, nu numărul. exp (5000000) nu poate fi neapărat un număr întreg.
adăugat autor Justin M, sursa