代码之家  ›  专栏  ›  技术社区  ›  Sorawee Porncharoenwase

浮点溢出为负

  •  -1
  • Sorawee Porncharoenwase  · 技术社区  · 7 年前

    我们知道,有符号整数可以有整数溢出,例如,符号位从0翻转到1,导致正整数变为负。

    浮点数也会发生同样的情况吗?实验上,当这个数字太大时,它就变成了 Inf . 但是,难道不可能溢出尾数或指数,导致类似的问题吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   rcgldr    7 年前

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