-1

Wir wissen, dass eine Ganzzahl mit Vorzeichen einen Integer-Überlauf haben kann, wenn das Vorzeichenbit beispielsweise von 0 auf 1 umgedreht wird, wodurch die positive ganze Zahl negativ wird.Gleitkommaüberlauf zu negativ

Kann das gleiche mit der Gleitkommazahl passieren? Wenn die Zahl experimentell zu groß ist, wird sie einfach Inf. Aber wäre es nicht möglich, die Mantisse oder den Exponenten zu überfließen, was ein ähnliches Problem verursacht?

Antwort

0

Bei IEEE-Float (Float 32 Bit, Double 64 Bit, Long Double 80 Bit) werden die Zahlen ähnlich wie Zeichen + Magnitude statt Zweierkomplement gespeichert. Der Exponent hat auch keinen normalen Bereich, mit speziellen Werten für Null oder alle ein Bit. Wiki-Artikel für double:

https://en.wikipedia.org/wiki/Double-precision_floating-point_format

Wenn auf Array so etwas wie Radixsort tun Arten von schwimmenden, die den besonderen Wert Fällen nicht enthalten (wie Unendlichkeit, NAN, ...), eine Umwandlung von Zeichen und normalerweise wird ein Betrag zu einem "Zweierkomplement" verwendet. Beispiel C-Makros zum Konvertieren zwischen 64-Bit-Zeichen und -Moditude in vorzeichenloses Long Long (64-Bit-Ganzzahl ohne Vorzeichen) und zurück. Beachten Sie, dass dies dazu führt, dass der konvertierte Vorzeichen- und Größenwert für den negativen Nullpunkt kleiner als der für den positiven Nullwert ist.

// converting doubles to unsigned long long for radix sort or something similar 
// note -0 converted to 0x7fffffffffffffff, +0 converted to 0x8000000000000000 
// -0 is unlikely to be produced by a float operation 

#define SM2ULL(x) ((x)^(((~(x) >> 63)-1) | 0x8000000000000000ull)) 
#define ULL2SM(x) ((x)^((((x) >> 63)-1) | 0x8000000000000000ull))