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