2010-03-26 16 views
50

Perché il C++ non supporta la doppia sintassi senza segno?Doppio senza segno in C++?

+3

quello Langs lo supportano? Pensa che in genere si presume che si stia utilizzando qualsiasi tipo di virgola mobile, quindi non è praticamente mai necessario. – SteelBytes

+0

Ehi, ho corretto la sintassi della sintassi. –

risposta

62

Poiché i formati di virgola mobile tipici non supportano i numeri senza segno. Si veda, ad esempio, this list of IEEE 754 formats.

L'aggiunta di un formato numerico non supportato dall'hardware comune rende la vita difficile agli autori di compilatori e probabilmente non è considerata valida.

+1

Anche l'idea * è con virgola mobile. Quel ** Qualsiasi ** numero dovrebbe essere rappresentabile, inclusi gli interi negativi fuori all'infinito. I numeri non firmati sono controproducenti per questo obiettivo. – unixman83

+26

Ehm, no, non è questo il punto. O se è il punto, tutti i tipi di floating point sono destinati all'insuccesso. L'insieme dei numeri che possono sempre essere rappresentato in modo significativo in un computer è numerabile ... –

13

Il C++ non supporta i tipi di virgola mobile senza segno perché la maggior parte dell'hardware in virgola mobile non supporta i tipi di virgola mobile senza segno. Alcune schede grafiche funzionano con virgola mobile senza segno, ma sono generalmente interne, non realmente visibili a un programma o utente.

7

Gli interi senza segno ottengono un po 'di precisione in più e hanno semantica bit-bit leggermente diversa dagli interi con segno. I float e i doubles si riservano sempre un po 'di segno (sulla maggior parte dell'hardware) e non hanno semantica bit-saggia, quindi non c'è alcun vantaggio reale nell'avere un tipo reale senza segno.

+9

È teoricamente * potrebbe * utilizzare tale bit per la mantissa o esponente, però, l'aumento sia portata o la precisione. – Joey

+1

Beh, volevo un doppio senza segno per controllare che fosse sempre un numero positivo senza continuare a controllarlo. Quindi sì, c'è beneficio. – Zammbi

+0

@ Јοеу: (. Ci scusiamo per il ritardo, piuttosto di risposta) Sì, sarebbe d'aiuto, ma la domanda era per la mancanza di doppi firmati in C++. Non si trattava del motivo per cui l'hardware non lo supporta. L'aggiunta del concetto al C++ senza l'aggiunta di supporto per l'hardware non ti procurerebbe nulla. –