3_浮点数的秘密

内存中的浮点数
  • 浮点数在内存的存储方式为 :符号位 ,指数, 尾数
类型符号位指数尾数
float1位(第31位)8位(第23–30)位23位(第0–22位)
double1位(第63位)11位(第52–62)位52位(第0–51位

float 于double 类型的数据在计算机内部的表示法是相同的,但由于所占存储空间不同,其分别能后表示的数值范围和精度不同。

浮点数存储示例
浮点数的转换
  1. 用浮点数转换成二进制
  2. 用科学计数法表示二进制浮点数
  3. 计算指偏移后的值

注意:

计算指数时需要加上偏移量,而偏移量的值与类型有关

示例:对于指数 6,便宜后的值如下:

float : 127 + 6 --> 133

double: 1023 + 6 --> 1029

实数8.25在内存中的表示
  • 8.25的二进制表示:1000.01 -> 1.00001 * (2 ^ 3)
    • 符号位 :0
    • 指数: 127 + 3 -> 130 -> 10000010
    • 小数:00001
  • 内存中8.25的float 表示
  • 0 10000010 0000100000000000000000 ->0x41040000
#include <stdio.h>
int main(int argc, char const *argv[])
{
    float f = 8.25;
    unsigned int  * p = (unsigned int *)&f;
    printf("0x%08X\n",*p);
    return 0;
}

浮点类型的秘密

  • float 能表示的具体数字的个数与int相同
  • flaot 可表示的数字之间不是连续的 ,存在间隙
  • float 只是一种近似的表示法, 不能作为精确数使用
  • 由于内存表示法相对复杂,flaot 的运算速度比int慢的多

注意:

double 与float 具有相同的内存表示法,因此double 也是不精确的 。由于double 占用的内存较多,所以能表示的精度比float高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值