欢迎光临散文网 会员登陆 & 注册

浮点数表示

2023-08-29 22:19 作者:我说你这样做就慢了  | 我要投稿

1.浮点数的表示格式 S表示符号位;M是二进制定点小数,表示尾数;E是二进制定点整数,也称为阶码,用移码表示。R为基数是隐含的,比如2、4、16等。一般用数符、阶码、尾数来表示浮点数。 下面是一个32位短浮点数的例子

2.浮点数表示范围

运算结果大于最大正数或小于最小负数称为正上溢和负上溢。一旦上溢,则必须进行中断运算操作。而在最大负数和最小正数之间则称为负下溢和正下溢,此时浮点数值趋于0,仅将其当作机器0处理。 3.浮点数规格化 左规:当尾数的最高位不是有效位,即±0.000…需要尾数左移,每移动一位,阶码减1(基数=2)。左规可能多次。 右规:当有效位移动到小数点前,将尾数右移,移动一位,阶码+1(基数=2)。右规仅需要一次。 基数不同,浮点数的规格化形式也不同。当浮点数尾数基数为2时,原码规格化数的尾数最高位一定是1。当基数为4时,原码规格化的尾数最高两位不全为0(此处采用王道书原文)。 4.IEEE 754 标准

基数隐含为2,尾数采用隐藏位策略的原码表示,阶码用移码表示。

比如以短浮点数为例,8位阶码能表示127,而后的23位尾数最终表示的最高位数值一定是1,因此采用隐藏1的策略,从而达到多表示一位的目的。23位尾数实际能表示24位有效数字。 比如(12)10=(1100)2 规格化后为1.1×2^3,其中整数部分的1将不再存储在23位尾数中。

在存储阶码时还要注意将阶码真值+阶码偏移量。比如上述例子中,阶码真值为3,还要+短浮点数的偏移值127(长浮点数为1023),最终结果为130(82H);长浮点数就是1023+3=1026(402H)。

定点运算超出表示范围,发生溢出。浮点运算,超出范围不一定溢出,需规格化后超出范围,才是溢出。 5.浮点数加减运算 1)对阶:对齐使阶码相同等,为此需要先算出阶差,然后小阶向大阶看齐,将阶码小的进行尾数右移,直至阶数相等,在此过程中若舍弃掉有效位则会使精度降低。 2)尾数求和 3)规格化:IEEE 754规格化尾数的形式为±1.xxxx 1、右规:±1x.xxx,尾数最高位1被移到小数点前一位作为隐藏位,最后一位移出要考虑舍入。右规只进行一次。 2、左规:±0.0000x,需左规多次,直至将第一位1移动到小数点左边。 4)舍入 5)溢出判断:指数上溢异常,指数下溢按机器0处理。 浮点数的溢出不是看尾数是否溢出,而是看规格化后的指数是否溢出。 双符号位要注意01.xxx或者10.xxx需要右规一次,00.0xxx或者11.1xxx需要左规至00.1xxx或者11.0xxx。 6)c语言浮点数类型:float和double型对应754中的单精度和双精度浮点数。强制转换过程char→int→long→double,float→double都是从小范围转换到大范围,没有精度损失。 以上为本人在二刷408时对于知识点一些总结。

浮点数表示的评论 (共 条)

分享到微博请遵守国家法律