2010-04-14 4 views
14

Ho bisogno di aiuto per lavorare con numeri molto grandi. Secondo il calc di Windows, l'esponenteArchiviare e lavorare con numeri grandi in C

174^55 = 1.6990597648061509725749329578093e+123 

Come lo memorizzo utilizzando C (standard C99)?

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

In C, '^' è XOR binario, non esponenziale. Devi usare la funzione 'pow()' per quello. –

+1

L'operatore '^' significa XOR, non l'esponenziazione, in C. – pyon

+0

Stai facendo un XOR, hai bisogno di pow – Skynight

risposta

25

tipi normali in C di solito può solo memorizzare fino a 64 bit, quindi dovrete memorizzare grandi numeri in un array, per esempio, e scrivere operazioni matematiche da soli. Ma non dovresti reinventare la ruota qui - potresti provare lo GNU Multiple Precision Arithmetic Library per questo scopo.

E come già sottolineato, l'operazione ^ è XOR binario. Per l'esponenziazione, dovrai utilizzare funzioni matematiche come pow.

5

Se l'approssimazione è OK, è possibile utilizzare i numeri a virgola mobile (float o double). E hai bisogno di pow, non di ^, come hanno detto i commentatori.

Tuttavia, per la crittografia, l'approssimazione non funziona. Hai bisogno di supporto per l'aritmetica con interi molto grandi. GMP fornisce un supporto aritmetico generale a precisione multipla. Molti pacchetti crittografici avranno anche tali algoritmi nel loro codice, sia attraverso una libreria di terze parti che incorporata; PuTTY ha una libreria bignum per interi grandi, e OpenSSL probabilmente ha qualcosa di simile.

I tipi di dati di base C non sono sufficienti.

2

È possibile memorizzarlo in un array di numeri interi. Un numero intero a 64 bit è solo 2 numeri interi a 32 bit. Un numero intero a 1024 bit può anche essere visto come 32 numeri interi a 32 bit.