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

如何实现将二进制0、1数组转换为浮点数的函数?

修复二进制数组转浮点数函数

问题描述

需要实现一个函数,接收0和1组成的二进制数组,返回对应的浮点数。当前binaryToFloat函数存在错误:输入[0, 1, 0, 0, 1, 1, 0, 0](对应4.8的4位整数+4位小数二进制近似)时,返回5.2而非预期的近似值4.75(因4.8的二进制小数是无限循环,仅取4位时为0.1100,对应0.75)。且只能使用提供的工具函数。

错误原因

原binaryToFloat函数的小数部分计算逻辑完全错误:

  • 错误地将小数位的权重计算为2^(3 - (i - 4)),随后除以10,这不符合二进制小数的权重规则(二进制小数每一位的权重是2^(-k),k为小数位的位置,从1开始)。

修复后的函数

def binaryToFloat(bits: List[int]) -> float:
    # 按数组长度拆分整数部分和小数部分(与floatToBinary逻辑对应,两者长度相等)
    split_idx = len(bits) // 2
    int_bits = bits[:split_idx]
    frac_bits = bits[split_idx:]
    
    # 使用提供的bytesToNum计算整数部分
    whole_part = bytesToNum(int_bits)
    
    # 计算小数部分:每一位对应2^(-(位置+1))
    fractional_part = 0.0
    for i in range(len(frac_bits)):
        if frac_bits[i] == 1:
            fractional_part += 2 ** (-(i + 1))
    
    return whole_part + fractional_part

验证结果

调用binaryToFloat([0, 1, 0, 0, 1, 1, 0, 0])将返回4.75,这是4.8的4位二进制小数近似值(因0.8的二进制是0.11001100...无限循环,仅取4位时截断为0.1100,对应0.75)。

说明

  • 该函数严格遵循floatToBinary的逻辑:数组前半为整数部分的二进制(长度由floatToBinary的size参数决定),后半为小数部分的二进制(长度与整数部分相同)。
  • 整数部分直接使用提供的bytesToNum函数计算,确保符合工具函数的使用限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:07:03