Emulando operazioni numeriche in software
-
27-09-2019 - |
Domanda
Le operazioni numeriche che facciamo nei nostri programmi sono limitati dal numero di byte che una specifica lingua di un determinato tipo di dati (o forse supporti hardware). Dire che posso usare intero di fare calcoli sul mio stipendio (anche "a breve" è più che sufficiente per guadagnare un anno !!!;)), ma non può fare lo stesso con la ricchezza di Bill Gates. Quindi, andiamo per cose come lunga lunga e roba del genere. Ma non siamo ancora in balia del numero di bit che vengono dati a noi.
Quindi, che ne dici se mi emulare operazioni numeriche nel software? Dire una classe che gli abstract e possono fare operazioni numeriche su numeri con 1000s di cifre ... Naturalmente sarà troppo troppo lento, ma non sono molto preoccupato per la complessità, ma guardando più a soli computabilità ...
Forse posso usarlo per calcolare PI a 1000 accuratezza cifre in mesi o un Mersenne Primes in pochi anni e porta a casa $ 100K;)
Così ora la mia domanda, 1) Ci sono già tali librerie per fare questo tipo di cose là fuori (in C / C ++). 2) Se vado circa l'attuazione di uno, avete qualche suggerimento per me? (+, -, *, /,%, <<, >> operazioni dovrebbero abbastanza immagino)
PS:
-
Sono C / C ++ programmatore.
-
E questa limitazione iniziato bugging me dai tempi della scuola.
Soluzione
Tali tipi di dati sono noti come i numeri precisione arbitraria. In Java, ci sono il BigDecimal
classi e BigInteger
che gestisce le operazioni di base (+, -, *, /) a livello cifre. Essi non hanno alcun limite di dimensione 'built-in'. Essi sono in realtà non è che lento e sono utilizzati in molti domini del mondo reale.
C / C ++ non ce l'hanno built-in, ma ci sono un sacco di librerie là fuori. Consulta l'elenco qui: http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries