2011-11-08 3 views
5

Perché il codice AWL non contiene un tipo di dati intero illimitato?Perché non esiste un tipo intero non bloccato?

Mi sembra che si tratti di un tipo di dati il ​​cui scopo è simile a quello di una stringa.
I programmatori non dovrebbero preoccuparsi dei valori di overflow e potrebbero funzionare con numeri molto più grandi.

Quindi sono curioso di sapere se c'è una ragione specifica per la sua assenza.

Questo non è un problema su come implementare o utilizzare uno da una libreria di terze parti, , ma solo una domanda sul motivo per cui la lingua non è già venuto con uno. Tutti i link sull'argomento sono apprezzati.

+2

La mia ipotesi è che la grande aritmetica non è banale da implementare (in modo efficiente). – Mysticial

+2

"ma solo una domanda sul perché il linguaggio non è già venuto con uno." Perché dovrebbe? Ognuno ha il suo piccolo problema domestico in cui pensano che una lingua dovrebbe supportare X. Ma questo non significa che dovrebbe. Ho programmato per oltre 20 anni e ho usato le stringhe molto frequentemente.Eppure, non ho mai avuto bisogno di un intero di precisione arbitrario. Questo non vuol dire che sia un motivo per non averne uno. Ma suggerisce che forse la domanda è perché _should_ la libreria standard C++ ha un numero arbitrario di precisione intero, non perché non lo fa. –

risposta

3

Probabilmente si intende arbitrary precision arithmetic o numeri grandi.

Forse non è in C++ perché non è rilevante per un vasto pubblico. Molto probabilmente, quasi ogni codice C++ non banale userebbe parte della STL (std::ostream o raccolte come std::vector o tipi come std::string).

Ma molti codici non richiedono grandi numeri.

Allo stesso modo, le interfacce grafiche (come Qt) non fanno parte di STL, per gli stessi motivi. Molte persone non si preoccupano di questi problemi (ad esempio nel codice server o nelle applicazioni numeriche).

E definire una libreria standard è un grande sforzo. A mio parere, C++ STL è forse già troppo grande; non c'è bisogno di aggiungere molto altro dentro.

Se necessario, è possibile utilizzare GMP.

1

Perché anche via del ritorno quando lo STL è stato progettato:

c'erano già significativamente migliore arbitraria librerie precisione interi in C. Certo non erano ufficialmente le classi, ma le strutture hanno usato ancora fatto il lavoro. Un'implementazione STL non otterrebbe molto da coloro che hanno bisogno di numeri interi arbitrari di precisione, il che mi porta alla seconda ragione:

Non che molte persone abbiano effettivamente bisogno di interi di precisione arbitrari. Coloro che fanno, inseriscono una libreria di terze parti. Per la maggior parte delle persone a 32 bit ha fatto il lavoro in quei giorni. Per molte persone lo fanno ancora. E le prestazioni sono significativamente migliori. Anche su un sistema senza operazioni native a 64 bit è possibile simularle con poche istruzioni ed essere ancora significativamente più veloci di un'implementazione di numeri arbitrari (indipendentemente da quanto sottile sia, la parte arbitraria e le allocazioni di heap probabili lo renderanno più costoso di due operazioni in interi minori e un trasporto manuale).

Al di là di tutto ciò che si riduce semplicemente a Stroustrup, non riteneva di avere un appeal abbastanza ampio da adattarsi alla sua visione dell'STL.

Penso che una domanda migliore sarebbe perché nessuna valuta o classe decimale di precisione arbitraria nell'STL, poiché penso che siano molto più comunemente un problema, ma le risposte sono le stesse.