admin 管理员组

文章数量: 1086019


2024年2月27日发(作者:power用法)

浮点数例题与解析

目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格:

符号位 阶码尾数 长度

float 1 8 23 32

double 1 11 52 64

通通表示为1.f * 2^n

因为浮点数中的小数部分 = x1*1/2 + x2*1/4 + .....+xn*1/(2^n)来近似,所有这就是浮点数的精度问题。

以下通过几个例子讲解浮点数如何转换为二进制数

例一:

已知:double类型38414.4。求:其对应的二进制表示。

分析:double类型共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位:

最高位63位是符号位,1表示该数为负,0表示该数为正;

62-52位,一共11位是指数位;

51-0位,一共52位是尾数位。

步骤:按照IEEE浮点数表示法,下面先把38414.4转换为十六进制数。

把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理:

0.4=0.5*0+0.25*1+0.125*1+0.0625*0+……

实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了。隐藏位技术:最高位的1不写入内存(最终保留下来的还是52位)。


本文标签: 浮点数 表示 尾数 符号 部分