32位浮点数

32位单精度浮点数

  1. 在计算机中无法使用“浮点数 == 浮点数”
float float1 = 0.2;
float float2 = 2/10;
if(float1 == float2)
    cout<<"float1 == float2"<<endl;
else
    cout<<"float1 != float2);

这里写图片描述

浮点数在计算机中的表示

  • sign 最高位表示符号域(bit31)
  • exponent 8bit的指数域(bit23-bit30)
  • fraction 23bit的小数域(bit0-bit22)
    这里写图片描述

    指数部分

  • 8位指数的取值范围为0~255(00000000~11111111),但在浮点数的阶码中,00000000与11111111被保留用作特殊情况,所以阶码可用范围只有1~254,总共有254个值。
  • 为了能表示更小的数,IEEE754规定,指数有一个偏移常量127,即指数中的127表示0
  • 指数范围(1 – 127 – 254)对应的实际值(-126 – 0 – 127)

小数部分

  • IEEE754规定float的有效值为“小数部分+1”
  • 小数部分全为0,表示的实际有效数字为1.0
  • 小数部分全为1,表示的实际有效数字约为2
  • 0.11111111111111111111 对应 1.11111111111111111111
  • 二进制1.11111111111111111111 约等于10进制的 2

32bit的浮点数能表示的最小正数与最大正数

  • 最小正数
    小数部分全为0,指数部分为00000001
    实际值 = 1.0 * 2^(-126) = 1.17549 * 10^(-38)

  • 最大正数
    小数部分全为1,指数部分为11111110
    实际值 = 2 * 2^(127) = 3.40282 * 10^(38)

现在看第一个浮点数不相等的例子,0.2在计算机中的存储如下图所示,可以看出计算机中实际存储的浮点数值并不等于0.2,实际值表示为0.20000000298023223876953125
这里写图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值