2011-10-28 8 views
-4

J'essaie de trouver le plus petit entier supérieur à un très grand nombre (par exemple, exp (5000000)). Comment ferais-je cela? Si ce n'est pas par programmation (parce que cela évalue à l'infini ou débordement dans MATLAB ou ma calculatrice), alors mathématiquement? (Déjà essayé exp (floor (log (exp (5000 * 1024)))) mais cela donnera juste l'infini).Le plus petit nombre entier plus grand que le très grand nombre

+0

que voulez-vous dire exactement en trouvant mathématiquement? Cherchez-vous une fonction qui donne son nième chiffre, par exemple? – vlsd

+0

juste pour vous donner une idée de la taille de ce nombre, j'ai essayé ce qui suit dans MATLAB avec la boîte à outils symbolique: 'ceil (sym ('exp (5000000)'))' le résultat est énorme: http://pastebin.com/BXDbPydL – Amro

+1

Oui. Il a environ 2,17 millions de chiffres. Énorme. –

Répondre

0

Vous devez utiliser une bibliothèque qui gère les grands nombres.

Mon karma Google semble pointer vers Symbolic Math Toolbox,

+2

Mais N est l'entier, pas le nombre. exp (5000000) n'est pas nécessairement un nombre entier. –

+0

@JustinM Vous avez raison. J'ai supprimé la déclaration incorrecte. –

-2

Comme Klas sais. Si vous intégrez i N alors le plus petit entier plus grand est N + 1. Pour calculer cela en utilisant par exemple C, vous pouvez écrire une fonction comme

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

Pour vous assurer que vous ne déborde pas le longtemps vous pourriez avoir quelque chose comme

#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; 
} 
Questions connexes