[C]浮点型数据

浮点常量

(1)表示方法

1.十进制小数形式。

2.指数形式。如123e6,注意,e前必须有数字,e后必须为整数。e前的小数部分中,若小数点左边有且仅有1位非零数字,则为规范化指数形式

(2)类型

默认作为双精度处理,一般占用 8 Bytes 内存。

浮点变量

(1)类型

1.float一般占 4 Bytes 内存。

2.double一般占8 Bytes 内存。

(2)精度(误差)

浮点型数据能够保证的有效位数是24位,24位之后的数字对于该浮点数是无意义的。

机内表示

(1)转换

十进制的浮点数要转换成二进制的浮点数(计算机内部,浮点数都是以二进制表示的),要分为两步:

1.小数部分的转换——“乘2取整”(由高位向低位)

0.8125 = 0.1101b

0.8125*2 =1.625  0.1       

0.6250*2 =1.250  0.11

0.2500*2 =0.500  0.110

0.5000*2 =1.000  0.1101

2.整数部分的转换——“除2取余”(由低位向高位)

(2)规格化

通过调整浮点数的阶码是该数的有效值在1与2之间,如:0.8125 = 0.1101b = 1.101*2^(-1).

(3)表示

按照 IEEE 754 标准,二进制float型浮点数在机内分为三段:

1.符号段 —— 1 bit,正数为0,负数为1

2.阶码段 —— 8 bit,值为-126~127,另两个值,-127和-128表示特殊数,-127表示非规规格化数(有效值不省略小数点前面的1,只用23位尾数),-128表示NaN。为使浮点数0和整数0统一,位码全0表示0,机内表示的阶码会对正常二进制数的阶值做+127的偏移。

3.尾数段 —— 23 bit,由于规格化之后小数点左边1位必定为1(除了0),故该位有效数字信息产生冗余,可选小数点之后23位作为尾数段,精度仍有24位。

如:35.6  =  100011 .1001 1001 1001 1001...b

                =  1 .00011 1001 1001 1001 1001 10 * 2^5

                =  01000 0100  00011 1001 1001 1001 1001 10

1000 0100阶值为 1000 0100b - 127 = 5, 表示小数点左边为1,右边为尾数段,阶数 5 的小数。

        0      =  0 0000 0000  00000 0000 0000 0000 0000 00

0000 0000  阶值为 0000 0000b - 127 = -127,表示小数点左边为0,右边为尾数段,阶数为 -127 的小数,这里为0。

附:查看float型数据的机内码程序

#include<iostream>
using namespace std;
int main()
{	
	float f=35.6f;
	unsigned int * pa =reinterpret_cast<unsigned int*> (&f);
	for(int i=31;i>=0;i--)
		cout<<(*pa>>i&1)<<(i==31||i==23?" ":"");
	getchar();
	return 0;
}

结果:

float与零值的比较

float与零值比较是要考虑精度的,不能直接判断一个float值是否等于0,不要将很大的浮点数和很小的浮点数做运算,结果会让人大吃一惊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值