2010-03-26 4 views
50

Warum unterstützt C++ nicht vorzeichenlose Doppelsyntax?Unsigned doppelt in C++?

+3

welche langs unterstützen es? Es wird angenommen, dass es allgemein angenommen wird, wenn Sie einen beliebigen Fließkomma-Typ verwenden. Dann wird unsigned praktisch nie benötigt. – SteelBytes

+0

Hey, ich habe deine Syntax-Syntax korrigiert. –

Antwort

62

Da typische Gleitkommaformate keine vorzeichenlosen Zahlen unterstützen. Siehe beispielsweise this list of IEEE 754 formats.

Das Hinzufügen eines numerischen Formats, das von herkömmlicher Hardware nicht unterstützt wird, macht den Compiler-Autoren das Leben schwer und wird wahrscheinlich nicht als Aufwand betrachtet.

+1

Auch die * Idee * ist mit Fließkommazahl. Diese ** Any ** Zahl sollte darstellbar sein, einschließlich der negativen ganzen Zahlen bis unendlich. Vorzeichenlose Zahlen sind für dieses Ziel kontraproduktiv. – unixman83

+26

Ähm, nein, das ist nicht der Punkt. Oder wenn es der Punkt ist, dann sind alle Gleitkommatypen zum Scheitern verurteilt. Die Menge der Zahlen, die in einem Computer sinnvoll dargestellt werden kann, ist zählbar ... –

13

C++ unterstützt keine unsignierten Gleitkommatypen, da die meisten Fließkomma-Hardware keine Gleitkommazahlen ohne Vorzeichen unterstützt. Einige Grafikkarten funktionieren mit nicht signierten Fließkommazahlen, aber sie sind im Allgemeinen intern und für ein Programm oder einen Benutzer nicht wirklich sichtbar.

7

Vorzeichenlose Ganzzahlen erhalten ein Extra an Genauigkeit und unterscheiden sich geringfügig von bitweisen Semantiken zu Ganzzahlen mit Vorzeichen. Floats und Doubles reservieren immer ein Bit für das Zeichen (auf der meisten Hardware) und haben keine bitweise Semantik, so dass es keinen wirklichen Vorteil gibt, einen unsignierten Realtyp zu haben.

+9

Sie könnten dieses Bit * theoretisch * für die Mantisse oder den Exponenten verwenden, indem Sie entweder den Bereich oder die Genauigkeit erhöhen. – Joey

+1

Nun, ich wollte ein unsigned Doppel, um zu kontrollieren, dass es immer eine positive Zahl ist, ohne es weiter zu überprüfen. Also ja, es gibt Vorteile. – Zammbi

+0

@ Јοеу: (Sorry für eher die späte Antwort.) Ja, es würde helfen, aber die Frage war über das Fehlen von unsignierten Doppel in C++. Es ging nicht darum, warum Hardware es nicht unterstützt. Wenn Sie das Konzept zu C++ hinzufügen, ohne es in Hardware zu unterstützen, würden Sie nichts gewinnen. –