You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求可保持顺序的IEEE-754 16位浮点数到16位无符号整数同构算法

保持顺序的IEEE-754半精度浮点数与16位无符号整数映射方案

核心原理

IEEE-754半精度(f16)的二进制结构为1位符号位(S)+5位指数位(E)+10位尾数位(M)。要实现顺序保持的无损映射,需针对正负浮点数的二进制特性做针对性处理:

  • 正浮点数的原始二进制按无符号整数比较时,大小关系与浮点数本身一致,但需将其整体偏移到负浮点数映射值的上方,确保正负区域的顺序分界正确
  • 负浮点数的原始二进制存在"越大的二进制值对应越小的浮点数"的反向关系,因此对所有位取反即可翻转顺序,使其匹配浮点数大小逻辑

映射算法(伪代码)

// f16转u16:输入为f16的原始16位二进制值
uint16_t f16_to_ordered_u16(uint16_t f16_raw) {
    const uint16_t SIGN_MASK = 0x8000;
    if (f16_raw & SIGN_MASK) {
        // 负浮点数:取反所有位,修正顺序
        return ~f16_raw;
    } else {
        // 正浮点数:翻转符号位,让正数值的u16全部大于负数的映射值
        return f16_raw | SIGN_MASK;
    }
}

// u16转f16:逆操作,还原原始f16二进制
uint16_t ordered_u16_to_f16(uint16_t u16_val) {
    const uint16_t SIGN_MASK = 0x8000;
    if (u16_val & SIGN_MASK) {
        // 对应原正浮点数:去掉翻转的符号位
        return u16_val & ~SIGN_MASK;
    } else {
        // 对应原负浮点数:取反还原
        return ~u16_val;
    }
}

验证示例

浮点数f16原始二进制映射后u16值大小关系验证
-∞0xFC000x03FF最小的u16值,对应最小的浮点数
-2.00xC0000x3FFF小于-1.0的映射值
-1.00xBC000x43FF小于0.0的映射值
0.00x00000x8000介于正负映射值之间
1.00x3C000xBC00大于0.0的映射值
2.00x40000xC000大于1.0的映射值
+∞0x7C000xFC00最大的u16值,对应最大的浮点数

关键特性

  1. 顺序保持:映射后的u16大小比较结果与原f16的大小比较结果完全一致
  2. 无损可逆:所有操作都是位级别的可逆运算,能100%还原f16的原始二进制数据
  3. 特殊值兼容:正负无穷、正负零都能正确映射;NaN的二进制也会被无损转换,但NaN本身的大小比较无定义,需根据业务场景额外处理

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:05:19