2009-08-19 13 views

risposta

14

Utilizzando una classe BigInteger; ce n'è uno nelle librerie J # (sicuramente accessibile da C#), un altro in F # (è necessario testarlo), e ci sono implementazioni indipendenti such as this one in puro C#.

+0

Vale anche la pena notare - c'è ancora un'altra implementazione nel DLR per supportare interi di precisione indefiniti di Python e Ruby, ma non ho guardato per vedere quale sia l'API pubblica per quella classe. –

1

Decimale ha un intervallo maggiore.

Il supporto per bigInteger in .NET 4.0 è supportato, ma non è ancora uscito dalla versione beta.

16

È possibile utilizzare .NET 4.0 beta? In tal caso, è possibile utilizzare BigInteger.

In caso contrario, se si sta attaccando entro 28 cifre, è possibile utilizzare decimal - ma essere consapevoli del fatto che, ovviamente, che sta per eseguire operazioni aritmetiche decimali, quindi potrebbe essere necessario per arrotondare in vari punti per compensare.

+0

Se qualcuno ha problemi con il problema dello spazio dei nomi, è in System.Numerics; – Adrian

1

Esistono diverse librerie per il calcolo con i grandi numeri interi, la maggior parte delle librerie di crittografia offre anche una classe per questo. Vedi this per una libreria gratuita.

0

È possibile utilizzare decimal. È maggiore di Int64.

Ha 28-29 cifre significative.

7

Per cosa si desidera utilizzare questi numeri? Se stai facendo calcoli con numeri veramente grandi, hai ancora bisogno della precisione fino all'ultima cifra? In caso contrario, dovresti prendere in considerazione l'utilizzo di valori in virgola mobile. Possono essere enormi, il valore massimo per il doppio tipo è 1.79769313486231570E + 308, (nel caso in cui non si sia abituati alla notazione scientifica significa 1.79769313486231570 moltiplicato per 10000000 ... 0000 - 308 zeri).

che dovrebbe essere abbastanza grande per la maggior parte delle applicazioni

+0

Incredibile che nessun altro ha menzionato questo, dato che OP non ha specificato interi. –

3

BigInteger rappresenta un arbitrariamente grande intero con segno.

using System.Numerics; 

var a = BigInteger.Parse("91389681247993671255432112000000"); 
var b = new BigInteger(1790322312); 
var c = a * b;