浮点数及其计算

目录

引言

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位):表示有效数字的小数部分。

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

  1. 将123.456转换为二进制形式:

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

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

    • 转换为二进制:133 = 10000101
  4. 尾数部分截取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                                             32
10111 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位机器
char888
short161616
int163232
long323264
long long646464
float163232
double646464

无损

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

有损

 int → float 可能会损失精度

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

  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值