首页 > 编程语言 >编写程序打印所有 FP8(E4M3)格式的浮点数

编写程序打印所有 FP8(E4M3)格式的浮点数

时间:2024-08-15 13:27:08浏览次数:10  
标签:E4M3 exponent mantissa 浮点数 sign e4m3 FP8

FP8 (e4m3) 是一种浮点数表示格式,其中:

  • e4 表示有 4 位用于指数。
  • m3 表示有 3 位用于尾数(即有效数字)。

为了生成并打印所有 FP8 (e4m3) 格式的浮点数,我们需要了解这个格式的细节。FP8 (e4m3) 的格式可以分解为:

  • 符号位(1 位)
  • 指数(4 位)
  • 尾数(3 位)

我们可以用以下步骤来生成所有可能的 FP8 (e4m3) 浮点数:

  1. 计算 FP8 (e4m3) 浮点数的不同组合。
  2. 处理特殊值,例如零和无穷大。
  3. 将这些组合转换为浮点数值并打印出来。

以下是 Python 程序的示例代码:

import numpy as np

def fp8_to_float(sign, exponent, mantissa):
    # FP8 e4m3 的指数偏移量为 7
    EXP_BIAS = 7
    # 计算实际指数
    exp = exponent - EXP_BIAS
    
    # 特殊值处理
    if exponent == 0 and mantissa == 0:
        return 0.0 if sign == 0 else -0.0
    elif exponent == 0b1111:  # 指数全1,处理无穷大和NaN
        if mantissa == 0:
            return float('inf') if sign == 0 else float('-inf')
        else:
            return float('nan')
    
    # 计算尾数的值
    mantissa_value = mantissa / (2**3)  # 尾数范围是 [0, 1)
    
    # 计算最终浮点值
    return (-1)**sign * (1 + mantissa_value) * (2 ** exp)

def generate_fp8_values():
    for sign in range(2):  # 0 和 1
        for exponent in range(16):  # 4 位二进制范围
            for mantissa in range(8):  # 3 位二进制范围
                value = fp8_to_float(sign, exponent, mantissa)
                print(f"sign={sign}, exponent={exponent:04b}, mantissa={mantissa:03b} => {value}")

generate_fp8_values()

代码解释

  1. fp8_to_float 函数:

    • 计算实际的浮点值。
    • 使用了指数偏移量(bias),在 FP8 (e4m3) 中,偏移量为 7。
    • 处理了特殊值(如零、无穷大和 NaN)。
  2. generate_fp8_values 函数:

    • 遍历所有可能的符号位、指数位和尾数位的组合。
    • 使用 fp8_to_float 函数计算实际浮点值,并打印结果。

运行此代码将打印 FP8 (e4m3) 格式中所有可能的浮点数及其对应的值。

标签:E4M3,exponent,mantissa,浮点数,sign,e4m3,FP8
From: https://www.cnblogs.com/litifeng/p/18360713

相关文章

  • 十万个为什么 [浮点数] 浮点数的表示
    //32位浮点数s(符号1位)eeeeeeee(指数8位)mmmmmmmmmmmmmmmmmmmmmmm(位数23位)//64位浮点数s(符号1位)eeeeeeeeeeee(指数12位)mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm(位数53位)//32位浮点数公式是s?(-1):(1)*(1.mmmmmmmmmmmmmmmmmmmmmmm)^(eeeeeeee......
  • 浮点数的加减运算
    浮点数的加减运算如果采用大阶码向小阶码看齐的原则,则尾数需要左移,最高有效位被移出,导致结果出错C语言中的浮点数据类型......
  • 浮点数的表示及IEEE754标准
    浮点数的表示浮点数的规格化IEEE754标准移码IEEE754这里有一个需要特别注意的地方,IEEE754中,尾数个位上的1是隐含的IEEE的阶码保留了全0和全1来表示特殊的状态,所以阶码最大值的真值为127,对应机器数为11111110,阶码最小值的真值为-126,对应的机器数为00000001......
  • LLM场景下常用浮点数介绍
    在计算机中,浮点数的表示基于IEEE754标准,这是最广泛使用的浮点数表示标准。对于一个具体的数值,如10.2345434,它会被分解为符号位、指数位和尾数位。这里以最常见的float32(单精度浮点数)为例来解释这个过程:符号位如果数值是正的,符号位为0;如果数值是负的,符号位为1。对于10.23454......
  • LLM场景下常用浮点数介绍
    在计算机中,浮点数的表示基于IEEE754标准,这是最广泛使用的浮点数表示标准。对于一个具体的数值,如10.2345434,它会被分解为符号位、指数位和尾数位。这里以最常见的float32(单精度浮点数)为例来解释这个过程:符号位如果数值是正的,符号位为0;如果数值是负的,符号位为1。对于10.23454......
  • LLM场景下常用浮点数介绍
    在计算机中,浮点数的表示基于IEEE754标准,这是最广泛使用的浮点数表示标准。对于一个具体的数值,如10.2345434,它会被分解为符号位、指数位和尾数位。这里以最常见的float32(单精度浮点数)为例来解释这个过程:符号位如果数值是正的,符号位为0;如果数值是负的,符号位为1。对于10.23454......
  • LLM场景下常用浮点数介绍
    在计算机中,浮点数的表示基于IEEE754标准,这是最广泛使用的浮点数表示标准。对于一个具体的数值,如10.2345434,它会被分解为符号位、指数位和尾数位。这里以最常见的float32(单精度浮点数)为例来解释这个过程:符号位如果数值是正的,符号位为0;如果数值是负的,符号位为1。对于10.23454......
  • LLM场景下常用浮点数介绍
    在计算机中,浮点数的表示基于IEEE754标准,这是最广泛使用的浮点数表示标准。对于一个具体的数值,如10.2345434,它会被分解为符号位、指数位和尾数位。这里以最常见的float32(单精度浮点数)为例来解释这个过程:符号位如果数值是正的,符号位为0;如果数值是负的,符号位为1。对于10.23454......
  • 在Python中,为什么这个负浮点数能够通过非负while循环测试条件?
    在Python中工作收集用户输入输入需要非负在程序的另一部分成功使用了While条件但现在不明白为什么这个捕获有效输入的测试失败了。print("Howmanygramsofxyzarerequired?")xyz_string=input()xyz=int(float(xyz_string))whilex......
  • 三种语言实现浮点数二分(C++/Python/Java)
    题目给定一个浮点数......