2017-05-23 1 views
1

J'ai des maths qui dépassent le type de données long C++. Quel serait le meilleur moyen de contourner cela? Je fais des mathématiques de base +, /, et * sur un chipset intégré. J'ajoute des nombres dans une boucle et divise le grand nombre après.Dépasse le plus gros type de données autorisé sur le chipset. C++

+1

Regardez dans les bibliothèques bignum. Il y en a quelques-unes qui flottent, en voici une: https://github.com/melwilson/bignum-embedded. Je pense que GNU en a un même si je ne suis pas sûr si c'est optimisé pour embarqué ou non. –

+0

J'ai utilisé et comme gmpxx.h –

Répondre

5

Habituellement, un long (identique à long int) a une taille d'au moins 4 octets. Mais, vérifiez par vous-même. Si vous trouvez que long long int a plus d'octets qu'un long int, et si vos valeurs ne dépassent pas la valeur maximale stockable dans un long long int, utilisez cela. utilisez #include <limits> et utilisez les fonctions de cet en-tête pour déterminer les valeurs maximales pouvant être stockées dans les types entiers.

Par exemple,

#include <limits> 
#include <iostream> 

int main() 
{ 
    std::cout << std::numeric_limits<int>::max() << std::endl; 
    std::cout << std::numeric_limits<long int>::max() << std::endl; 
    std::cout << std::numeric_limits<long long int>::max() << std::endl; 
} 

Ce produit les éléments suivants sur ma machine:

2147483647 
9223372036854775807 
9223372036854775807 

Toutefois, si vos valeurs dépassent ce qui peut être stocké dans un long long int aussi, utilisez une grande bibliothèque numérique .

+0

Mon système n'a pas une valeur plus élevée pour cela. Y a-t-il une autre bonne astuce pour représenter les nombres d'une manière telle que je puisse encore la décomposer et la diviser en dehors de la boucle sans beaucoup de frais généraux? – abstractness

+4

Si vous ne pouvez pas adapter vos nombres à long, et si vous avez encore besoin d'effectuer des opérations arithmétiques, vous devrez utiliser une bibliothèque bignum. N'essayez pas d'écrire une classe de bignum par vous-même, trouvez celle qui convient à votre plate-forme. – nakiya