目录

引言

1.浮点数的表示

1.1浮点数的作用和基本原理

1.2浮点数规格化

左规

右规

2.IEEE 754 标准

2.1图示:

2.2 阶码的全零全一有特殊含义:

2.3 IEEE 754 表示的范围:

2.4 十进制转IEEE 754:

2.5 IEEE 754转十进制:

3.浮点数的加减运算

①对阶

②尾数加减

③规格化

④舍入

⑤判溢出

4.C语言的强制类型转换

无损

有损

引言

浮点数(floating-point number)是一种用于表示实数的计算机数据类型,可以表示非常大或非常小的数,同时也可以表示带小数的数。浮点数通常用科学计数法表示,其中包含一个有效数字和一个指数。例如,3.14可以表示为3.14×10^0,而3000可以表示为3.0×10^3。

浮点数的表示方式通常如下: 浮点数=有效数字×10指数\text{浮点数} = \text{有效数字} \times 10^{\text{指数}}浮点数=有效数字×10指数 在计算机中,浮点数一般遵循IEEE 754标准,该标准定义了浮点数的表示格式。

具体实例: 假设我们需要表示数字123.456。

在科学计数法中,这个数字可以表示为: 1.23456×1021.23456 \times 10^21.23456×102

在IEEE 754单精度浮点数(32位)中,该数字的表示方式如下:

符号位(1位):0 表示正数,1 表示负数。指数部分(8位):表示指数部分。尾数部分(23位):表示有效数字的小数部分。

我们来具体计算这个例子:

将123.456转换为二进制形式:

整数部分123转换为二进制:1111011小数部分0.456转换为二进制:0.0111011111...组合起来:1111011.0111011111... 转换为标准化形式(科学计数法形式):1.1110110111011111... × 2^6

其中,1.1110110111011111... 是有效数字,6 是指数。 指数部分加上偏移量(127,对于单精度浮点数):6 + 127 = 133

转换为二进制:133 = 10000101 尾数部分截取23位:1110110111011111...

最终,浮点数的表示为:

符号位:0指数部分:10000101尾数部分:1110110111011111...

整个32位浮点数的二进制表示如下: 0 10000101 11101101110111110 \, 10000101 \, 11101101110111110100001011110110111011111

这是一个具体的浮点数表示实例,展示了如何在计算机中表示和存储浮点数。

1.浮点数的表示

1.1浮点数的作用和基本原理

定点数可以表示的数字范围有限,但我们又不能无限制的增加数据的长度。

浮点数就可以做到在二进制位数不变的情况下增加数据的表示范围。

1.2浮点数规格化

在整体存储空间不变的情况下尽可能多的保存更多的精度。

例如十进制的科学表示法会要求尾数部分的最高位是有效值:

左规

当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1。

可能会导致阶码下溢。

右规

当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1。

可能会导致阶码上溢出。

2.IEEE 754 标准

2.1图示:

类型数符阶码位数数值总位数偏置值十六进制十进制短浮点数(float)1823327FH127(2^(8-1)-1)长浮点数(double)11152643FFH1023(2^(11-1)-1)临时浮点数(long double)11564803FFFH16383(2^(15-1)-1)

2.2 阶码的全零全一有特殊含义:

阶码尾数表示全为0不全为0表示非规格化小数±(0.xx..x)ⅹ2^-126 全为0全为0表示真值±0全为1全为0无穷大±∞全为1不全为0表示非数值“NaN”(NotaNumber)

2.3 IEEE 754 表示的范围:

格式数值码值单精度最大绝对值2^128 - 2^1040 11111110 1111 1111 1111 1111 1111 111最小绝对值2^(-126)0 00000001 0000 0000 0000 0000 0000 000双精度最大绝对值2^1024 - 2^9710 11111111110 1*52 最小绝对值2^(-1022)0 00000000001 0*52

解释:

单精度浮点数格式有1位符号位,8位指数位,23位尾数位(但有效数字是24位,因为有一个隐含的1)。

最大指数是 254 (即 11111110),但减去偏移量 127 得到 127,所以最大的实际指数是 127。最大的尾数是 1.11111111111111111111111,即 2 - 2^-23。

IEEE 754单精度浮点数的尾数部分是一个24位的二进制数,包括一个隐含的1位。也就是说,尾数可以表示为1.xxx...xxx,其中xxx...xxx表示尾数的23位。

当尾数的23位全是1时,这个数值表示的是最大的尾数值:

这个数值可以写成:

这是一个几何级数,其总和是:

这个级数可以表示为:

即:

因此,当尾数的23位全是1时,其值为:

2.4 十进制转IEEE 754:

将-0.75转换为IEEE 754单精度浮点数格式表示。

数符:负数为1;

尾数:(-0.75)10 = (-0.11)2 = (-1.1 ✖ 2^-1)2 为 1000 0000 0000 0000 0000 000 因为自动代表最前头有个1.

阶码:-1 转为移码表示 -1+127 = (126)10 = (0111 1110)2

IEEE754:

0 1 89 3210111 11101000 0000 0000 0000 0000 000

2.5 IEEE 754转十进制:

将IEEE754 的单精度浮点数C0A00000H 化为十进制数:

先化为二进制: 1100 0000 1010 0000 0000 0000 0000 0000

数符:1,是个负数

阶码:(1000 0001)2 = (129)10 129 - 127 = 2

尾数:1.01 (自动前头表示的有个零)

(1.01)2乘以2^2= (101)2 = 5

是个负数,所以结果是 -5

3.浮点数的加减运算

以2009年考研题为例:

【2009 统考真题】浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和判

断溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5和7(均含2位符号位)。若有两个数X=2^7×29/32和Y=2^5×5/8,则用浮点加法计算X+Y的最终结果是(D)。

A. 00111 1100010 B. 00111 0100010

C. 01000 0010001 D.发生溢出

先将xy化为对应二进制浮点数:

X:

00111 0011101

Y:

00111 0000101

①对阶

小阶对大阶

我们在最开始就化好了

②尾数加减

0011101

+0000101

——————

0100010

00111 0100010

③规格化

01000 0010001

④舍入

无舍入

⑤判溢出

阶码符号位01,溢出,故选D选项。

4.C语言的强制类型转换

类型16位机器32位机器(考研常考)64位机器char888short161616int163232long323264long long646464float163232double646464

无损

char → int → long →double,数值位完全够用,既不会损失精度也不会溢出

有损

int → float 可能会损失精度

float → int ,可能溢出,也可能损失精度