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. –
- 1. Come posso gestire enormi matrici?
- 2. Come gestire massicci numeri in C
- 3. Come calcolare il seno di numeri enormi
- 4. Come gestire le prestazioni in enormi UniformGrids?
- 5. Come i linguaggi di programmazione gestiscono numeri aritmetici enormi
- 6. Come devo gestire l'autenticazione con Nancy?
- 7. Come devo gestire le eccezioni in questa funzione C#?
- 8. Come implementare la divisione lunga per numeri enormi (bignums)
- 9. Come gestire numeri interi arbitrariamente grandi
- 10. Come gestire i numeri in modo generico?
- 11. C# Salvataggio di immagini enormi
- 12. Numeri casuali con C#
- 13. Devo gestire le pagine o semplicemente appoggiarmi alla memoria virtuale?
- 14. Come gestire l'overflow in C
- 15. Devo citare numeri in SQL?
- 16. Modi per gestire transazioni enormi su qualsiasi database?
- 17. come importare enormi .csv nel database sql?
- 18. Confronto di file enormi usando C++
- 19. Quali errori/eccezioni devo gestire con urllib2.Request/urlopen?
- 20. Elaborazione di file enormi in C#
- 21. Come gestire i numeri a ripetizione infinita come decimali?
- 22. Come codificare una soluzione per gestire grandi numeri?
- 23. Come devo gestire l'Autorizzazione/Autenticazione nella mia app Asp.net MVC?
- 24. Come pianificare enormi progetti software?
- 25. Come devo gestire un array molto grande in Java?
- 26. C++ 11 numeri casuali
- 27. Come gestire IIS da C#?
- 28. Quale tipo di variabile posso utilizzare per contenere numeri enormi (più di 30 cifre) in java?
- 29. Android: come devo gestire le eccezioni di accesso ai DB?
- 30. Come devo gestire questo caso d'uso utilizzando EventMachine?
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. –