Sto scrivendo un'app che implica l'aritmetica con numeri giganteschi, con molte cifre. Ho scritto in precedenza una classe che semplifica la gestione di grandi numeri definendoli come stringhe e quindi utilizzando le funzioni di aritmetica delle stringhe lente. È questo il modo migliore per farlo? In caso contrario, come dovrei affrontare questo problema? C# ha qualcosa di integrato in queste situazioni?C#: Come devo gestire l'aritmetica con numeri enormi?
risposta
.NET 4 avrà questo integrato tramite il tipo BigInteger. Si dice che sia ben sintonizzato e che dovrebbe funzionare molto bene.
Per 3.5 e precedenti, è possibile utilizzare un'implementazione di BigInteger dalle origini Dynamic Language Runtime. (Vedi ad es. http://dlr.codeplex.com/sourcecontrol/changeset/view/40021?projectName=dlr#694008 ed esegui il drill-down in Src/Runtime/Microsoft.Dynamic/Math.) Non so se questo è stato ottimizzato come il tipo .NET 4 BigInteger, ma dovrebbe comunque essere più efficiente della tua versione di stringa perché rappresenta internamente i numeri grandi usando i tipi interi ed esegue l'aritmetica usando operazioni intere.
Se è possibile farlo su .NET 4, System.Numeric.BigInteger può essere d'aiuto. Se utilizzi una versione precedente di .NET, l'IntX ti aiuterà.
Vedere anche questo this SO question su interi grandi in C#.
La libreria bignum GNU MP è una delle più veloci in circolazione. c'è un wrapper .NET per questo http://gnumpnet.codeplex.com/
Ecco un altro bignum library per .NET con origine.
Grande classe Integer che ho utilizzato molte volte per progetti di crittografia (dove sono necessari numeri estremamente grandi). Funziona alla grande.
Nella versione dotnet superiore a 4,0, System.Numerics.BigInteger
vi aiuterà per questo problema.
se si ottiene errore di riferimento assieme utilizzando la sintassi di cui sopra, quindi aggiungere di riferimento usando
http://www.dllme.com/dll/files/system_numerics_dll.html.
Spero che questo ti possa aiutare ..!
Questo è già stato indicato nella risposta accettata. –
Int64 non è sufficiente? Potresti dare un esempio di un'azione aritmetica che ti piacerebbe esibire? – Zyphrax
System.Decimal sarà abbastanza grande per te? Il valore più grande che può essere rappresentato con esso è 79,228,162,514,264,337,593,543,950,335. – jjxtra
"Humongous" non è in realtà una descrizione utile. Stiamo parlando di numeri con venti cifre, un migliaio di cifre, un milione di cifre, un miliardo di cifre o più di un miliardo di cifre? La risposta alla tua domanda sarà diversa per ciascuno. –