首页 > 其他分享 >浮点数格式: FP64, FP32, FP16, BFLOAT16, TF32

浮点数格式: FP64, FP32, FP16, BFLOAT16, TF32

时间:2023-11-20 10:12:24浏览次数:31  
标签:FP64 TF32 exponent 浮点数 数值 sign fraction 精度

浮点数格式 (参考1参考2

浮点数是一种用二进制表示的实数,它由三个部分组成:sign(符号位)、exponent(指数位)和fraction(小数位)。不同的浮点数格式有不同的位数分配给这三个部分,从而影响了它们能表示的数值范围和精度。例如:

 下面是一些常见的浮点数格式的介绍:

  • FP64(双精度浮点数):用64位二进制表示,其中1位用于sign,11位用于exponent,52位用于fraction。它的数值范围大约是2.23e-308到1.80e308,精度大约是15到17位有效数字。它通常用于科学计算中对精度要求较高的场合,但在深度学习中不常用,因为它占用的内存和计算资源较多。
  • FP32(单精度浮点数):用32位二进制表示,其中1位用于sign,8位用于exponent,23位用于fraction。它的数值范围大约是1.18e-38到3.40e38,精度大约是6到9位有效数字。它是深度学习中长期使用的标准格式,因为它能平衡数值范围和精度,同时也有较好的硬件支持。
  • FP16(半精度浮点数):用16位二进制表示,其中1位用于sign,5位用于exponent,10位用于fraction。它的数值范围大约是6.10e-5到6.55e4,精度大约是3到4位有效数字。它是近年来在深度学习中越来越流行的格式,因为它能节省内存和计算资源,同时也有张量核心(Tensor Core)等专门的硬件加速器。但它的缺点是数值范围和精度较低,可能导致数值溢出或下溢的问题。
  • BFLOAT16(Brain Floating Point 16):用16位二进制表示,其中1位用于sign,8位用于exponent,7位用于fraction。它的数值范围和FP32相同,但精度只有2位有效数字。它是由Google提出的一种针对深度学习优化的格式,它的优点是能保持和FP32相同的数值范围,从而避免数值溢出或下溢的问题,同时也能节省内存和计算资源,提高训练速度。它的缺点是精度较低,可能导致数值不稳定或精度损失的问题。
  • TF32(TensorFloat 32):用32位二进制表示,其中1位用于sign,8位用于exponent,10位用于fraction,剩余的13位被忽略。它的数值范围和FP32相同,但精度只有3到4位有效数字。它是由NVIDIA在Ampere架构中推出的一种专为深度学习设计的格式,它的优点是能保持和FP32相同的数值范围,同时也能利用张量核心(Tensor Core)等专门的硬件加速器,提高训练速度。它的缺点是精度较低,可能导致数值不稳定或精度损失的问题。

浮点数的计算方式 (详细):

  浮点数是一种用二进制表示的实数,它由三个部分组成:sign(符号位)、exponent(指数位)和fraction(小数位)。不同的浮点数格式有不同的位数分配给这三个部分,从而影响了它们能表示的数值范围和精度。

浮点数的数学公式是:

value = (-1)^{sign} \times fraction \times 2^{exponent}

其中,sign是一个0或1的二进制数,表示浮点数的正负。exponent是一个整数,表示浮点数的指数部分。fraction是一个小于1的二进制小数,表示浮点数的小数部分。

例如,一个双精度浮点数(FP64)的二进制表示为:

  0 10000000001 1011001100110011001100110011001100110011001100110011

  它的sign为0,表示正数。它的exponent为10000000001,转换为十进制为1025,减去偏移量1023,得到2。它的fraction为1011001100110011001100110011001100110011001100110011,转换为十进制为0.6999999999999998。所以,这个浮点数的数值为:

  value = (-1)^0 \times 0.6999999999999998 \times 2^2 = 2.8

标签:FP64,TF32,exponent,浮点数,数值,sign,fraction,精度
From: https://www.cnblogs.com/lemonzhang/p/17843336.html

相关文章

  • 洛谷B2016 浮点数向零舍入(Python3)
    要点:1.有正有负怎么办?正负分开写?如果只看数字部分,那取整的方式是一样的。所以我们可以先输出符号,把问题全都转化到非负数集中。2.如何取整?此处取整为向下取整。而强制类型转换把浮点数转化为整型数的时候是把小数部分全部去掉,而不是四舍五入,与题中取整方式相符,故可直......
  • 2.3 CE修改器:浮点数扫描
    本关需要使用CheatEngine工具对浮点数进行扫描,完成修改任务。浮点数是一种带有小数点的数值,通过“浮点数”扫描方式进行修改。本关中,健康值为单精度浮点数,弹药值为双精度浮点数,需要将这两项数值都修改为5000或更高。提示建议禁用“快速扫描”功能,以获取更准确的扫描结果。这......
  • 2.3 CE修改器:浮点数扫描
    本关需要使用CheatEngine工具对浮点数进行扫描,完成修改任务。浮点数是一种带有小数点的数值,通过“浮点数”扫描方式进行修改。本关中,健康值为单精度浮点数,弹药值为双精度浮点数,需要将这两项数值都修改为5000或更高。提示建议禁用“快速扫描”功能,以获取更准确的扫描结果。这......
  • 与其他 IEEE 754 表示浮点数的编程语言一样,JavaScript 的 number 存在精度问题,比如 0.
    与其他IEEE754表示浮点数的编程语言一样,JavaScript的number存在精度问题,比如0.2+0.4的结果是0.6000000000000001。以下选项中,能得到0.6的是?AparseFloat(0.2+0.4)BparseFloat((0.2+0.4).toFixed(1))CMath.round(0.2+0.4)DparseFloat((0.2+0.6).toPrec......
  • 浅析C++中浮点数在内存中的存储方式
    1.任何数据在内存中都是以二进制的形式进行存储。例如,short型数据1156,由于在32位机和64位机都占2B一共16位其二进制形式为:0000010010000100。在IntelCPU架构的系统中(目前用的最多的硬件架构系统),存放方式为10000100(低地址单元)00000100(高地址单元),因为IntelCPU的......
  • 如何强制进行浮点数除法?除法总是向下取整为0?
    内容来自DOChttps://q.houxu6.top/?s=如何强制进行浮点数除法?除法总是向下取整为0?我有两个整数值a和b,但需要它们的浮点数比率。我知道a<b,我想计算a/b,所以如果我使用整数除法,我总是会得到一个余数为a的0。在Python2中,如何强制将c变成浮点数?c=a/b在......
  • 软件模拟实现IEEE-754单精度浮点数运算
    软件模拟实现IEEE-754单精度浮点数运算本文首发于吾爱破解论坛https://www.52pojie.cn/thread-1830228-1-1.html大多数CPU都有硬件的浮点单元(FPU),但是有一些MCU使用的内核(比如Cortex-M3)没有FPU,或者一些内核只支持单精度,同时大部分CPU都不支持高精度128位的浮点数,如果需要使用这......
  • IEEE 754标准中浮点数表示
    根据IEEE754标准,浮点数的表示公式为:\[f=(-1)^s*2^e*1.f\]s、e、f分别是浮点数的符号位、指数位和尾数位。它们可以通过以下方法获得:符号位s,符号位是浮点数的最高位,1表示正数,0表示负数。指数位e,指数位从第9位开始,共8位。指数位表示小数点的位置。尾数位f,尾数......
  • 浮点数表示
    表示N=尾数*基数^指数可以理解成十进制的0.00001=1×10-5 指数也可以称为阶码,一般使用移码表示(这是个正数,有阶符表示正负) 基数在计算机中无需存储,就是2 尾数一般使用补码表示(这个也是正数,有数符表示正负) 浮点数的比较与运算:1.运算方式:对阶-->尾数计算-->......
  • python基础-数据类型(none、集合、字典、浮点数)
    目录1.了解hash2.None类型3.集合(set)3.1定义3.2独有功能3.3公共功能3.4转换3.5其他3.5.1集合的存储原理3.5.2元素必须可哈希3.5.3集合查找元素速度快3.5.4对比和嵌套集合练习题4.字典(dict)4.1定义4.2独有功能练习题4.3公共功能4.4转换4.5其他4.5.1存储原......