In C#, come si può memorizzare e calcolare con numeri che superano significativamente il valore massimo di UInt64 (18,446,744,073,709,551,615)?Come gestite i numeri più grandi di UInt64 (C#)
risposta
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#.
Decimale ha un intervallo maggiore.
Il supporto per bigInteger in .NET 4.0 è supportato, ma non è ancora uscito dalla versione beta.
È 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.
Se qualcuno ha problemi con il problema dello spazio dei nomi, è in System.Numerics; – Adrian
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.
È possibile utilizzare decimal. È maggiore di Int64.
Ha 28-29 cifre significative.
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
Incredibile che nessun altro ha menzionato questo, dato che OP non ha specificato interi. –
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;
- 1. C: Stampa di grandi numeri
- 2. Come ottenere i numeri più grandi da una quantità enorme di numeri?
- 3. Lua C api: gestione di grandi numeri
- 4. Divisione di grandi numeri
- 5. Tipi per numeri grandi
- 6. Genera numeri grandi con srand() in c
- 7. Fattorizzazione di grandi numeri
- 8. Come C implementa l'assegnazione Python di grandi numeri
- 9. Conservazione di grandi numeri
- 10. Come ottenere l'ennesima radice di grandi numeri in C++?
- 11. Come generare numeri casuali di grandi dimensioni C
- 12. Spesso i numeri grandi diventano negativi
- 13. JSON.parse analizza/converte erroneamente i numeri grandi
- 14. Come gestire numeri interi arbitrariamente grandi
- 15. Perché il confronto è doppio più veloce di uint64?
- 16. Come esponenziare numeri veramente grandi in Objective-C?
- 17. I più grandi progetti di pitone
- 18. convertire numeri astronomicamente grandi in forma leggibile in C/C++
- 19. Calcolo di numeri interi molto grandi
- 20. pitone umano grandi numeri leggibili
- 21. dividere un elenco collegato in 2 liste pari contenenti i numeri più piccoli e più grandi
- 22. Eccezioni C++ non gestite
- 23. Come gestite i fallimenti di pthread_mutex_unlock?
- 24. Generazione di numeri casuali di grandi dimensioni
- 25. Divisione di grandi numeri in Python
- 26. Generazione di numeri casuali molto grandi java
- 27. C - Switch con più numeri di caso
- 28. C# "Esportazioni non gestite"
- 29. Come gestite i file esclusi con aspnet_compiler?
- 30. Potenza modulo dei grandi numeri
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. –