2010-04-14 17 views
14

J'ai besoin d'aide pour travailler avec de très grands nombres. Selon Windows calc, l'exposantStockez et travaillez avec les grands nombres en C

174^55 = 1.6990597648061509725749329578093e+123 

Comment est-ce que je stockerais cela en utilisant C (standard c99)?

int main(){ 
    long long int x = 174^55; //result is 153 
    printf("%lld\n", x); 
} 
+7

En C, '^' est binaire XOR, non exponentation. Vous devez utiliser la fonction 'pow()' pour cela. –

+1

L'opérateur '^' signifie XOR, pas exponentiation, en C. – pyon

+0

Vous faites un XOR, vous avez besoin de pow – Skynight

Répondre

25

types normaux en C peuvent généralement stocker seulement jusqu'à 64 bits, de sorte que vous devrez stocker de grands nombres dans un tableau, par exemple, et écrire vous-même des opérations mathématiques. Mais vous ne devriez pas réinventer la roue ici - vous pouvez essayer le GNU Multiple Precision Arithmetic Library à cette fin.

Et comme les commentaires ont déjà souligné, l'opération ^ est binaire XOR. Pour l'exponentiation, vous devrez utiliser des fonctions mathématiques comme pow.

5

Si l'approximation est OK, vous pouvez utiliser les nombres à virgule flottante (float ou double). Et vous avez besoin de pow, pas ^, comme l'ont dit les commentateurs.

Cependant, pour la cryptographie, l'approximation ne fonctionne pas. Vous avez besoin de support pour l'arithmétique avec de très grands entiers. GMP fournit un support arithmétique général à précision multiple. Beaucoup de paquets cryptographiques auront aussi de tels algorithmes dans leur code, soit par l'intermédiaire d'une bibliothèque tierce ou intégrée; PuTTY a une bibliothèque bignum pour les grands entiers, et OpenSSL a probablement quelque chose de similaire.

Les types de données de base C ne sont pas suffisants.

2

Vous pouvez le stocker dans un tableau d'entiers. Un entier de 64 bits est juste 2 entiers de 32 bits. Un entier de 1024 bits peut également être vu comme 32 entiers de 32 bits.