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:

  1. Sono C / C ++ programmatore.

  2. E questa limitazione iniziato bugging me dai tempi della scuola.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top