-1

我們知道有符號的整數可以有整數溢出,例如,符號位從0翻轉爲1,導致正整數變爲負數。浮點溢出爲負

浮點數可以發生嗎?在實驗中,當數字太大時,它就變成Inf。但是不可能溢出尾數或指數,導致類似的問題?

回答

0

在IEEE類型float(浮點32位,雙64位,長雙80位)的情況下,數字存儲類似於符號+大小而不是二進制補碼。指數也沒有正常範圍,具有零或全部一位的特殊值。雙維基文章:

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

如果做這樣的事情基數排序浮動類型的數組不包含特殊值的情況下(類似於無窮大,NAN,...),從符號的轉換和通常使用幅度到「二進制補碼」。示例C用於在64位符號和幅度之間轉換爲無符號long long(64位無符號整數)並返回的宏。請注意,這導致轉換後的符號和幅度值爲負零,小於正零。

// 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))