浮点数的加减运算【五星难点】

聊聊浮点数的加减法
浮点数,就像是计算机里的“带小数点的数”,它能让计算机处理像3.14或者0.0001这样的数字。浮点数加减,其实就跟你平时算钱差不多。
找对小数点:比如你有两张账单,一张是3.50元,另一张是0.75元。在加之前,你得把它们的小数点对齐,这样才能知道每一分钱怎么加。
对齐位数:如果一个数是0.0075,另一个是3.50,你得把0.0075变成3.50,这样两个数的小数点后面都有两位数,才好加。
开始加加减减:现在,你可以开始加这两个数了。就像你把3.50元和3.50元的钞票放在一起,总共就是7.00元。
进位和借位:如果你加的是0.95和0.05,加起来超过了1,就得进位,变成1.00元。如果是减法,比如0.50减去0.80,你得借位,就像从1元里借1角,变成0.40元再减去0.80,结果是-0.30元。
处理特殊情况:如果加出来的结果特别大或者特别小,超出了计算机能表示的范围,就像你算出来的钱数超出了你的钱包容量,这时候计算机会告诉你“出错了”。
舍入:有时候,计算机算出来的结果可能会有很长的小数,但是显示的时候需要舍去一些,就像你买东西找零,可能会舍去几分钱。
最终结果:最后,计算机会给你一个最接近的结果,就像你算完账后,告诉别人你总共有多少钱。
所以,浮点数的加减法,其实就是把两个带小数点的数对齐,然后像平时算钱一样加加减减,最后得到一个结果。计算机会帮你处理好所有的细节,你只需要知道最后的总数就行了。
 

什么叫浮点数对齐小数点?

浮点数对齐小数点,就像是你在做数学题时,要确保所有的小数点都在相同的位置上,这样你才能准确地进行加减运算。
想象一下,你有两个数字,一个是0.25,另一个是2.5。如果直接这样写,看起来像是0.25和2.5,但实际上它们表示的数值是不同的。为了对齐小数点,你可以把0.25写成2.500,这样两个数字的小数点后面都有三位数字,看起来就是2.500和2.500,现在它们就可以直接进行加减运算了。
在计算机中,浮点数的表示涉及到两部分:整数部分和小数部分(也称为尾数),以及一个指数部分,用来表示小数点移动的位置。浮点数对齐小数点的过程,其实就是调整指数部分,使得所有数字的小数点位置相同。
这里有几个步骤:
确定指数:查看两个浮点数的指数部分,找出它们之间的差异。
调整指数:将指数较小的浮点数的指数部分增加,使其与较大的指数对齐。这通常意味着将小数点向左或向右移动。
调整尾数:随着指数的调整,尾数(小数部分)也需要相应地乘以10的幂,以保持数值不变。
例如,如果有两个浮点数,一个表示为1.23×10^3(即1230),另一个表示为3.45×10^-1(即0.345),要对齐它们,你可以将第二个数的指数增加到3,得到3.45×10^3(即3450)。这样,两个数的小数点就对齐了,可以直接进行加减运算。

 

浮点数加减运算的过程:
对阶:就像排队一样,要让两个数的“指数”(也就是决定大小的那个部分)排成一行,如果一个数的指数小,就把它的小数点往右挪,每挪一次,指数就加1,直到两个数的指数一样。
尾数求和:现在两个数的指数一样了,接下来就像普通的整数一样,把两个数的小数部分(尾数)加在一起。
规格化:加完以后,要保证小数点后第一位是1,如果第一位不是1,就需要调整小数点的位置,让第一位变成1。
左规和右规:
左规:如果小数点后出现了连续的0或1,就需要把小数点往左挪,让第一位变成1。
右规:如果加出来的数太大了,小数点后第一位变成了10或01,就需要把小数点往右挪,让第一位重新变成1。
舍入:在调整小数点的过程中,可能会遇到需要舍入的情况。有两种方法:
0舍1入法:如果小数点后面要舍去的数字是0,就直接舍去;如果是1,就把最后一位加1。
恒置1法:不管要舍去的是什么,最后一位都设为1。
溢出判断:如果右规之后,数还是太大或者太小,那就是真的溢出了。大的溢出需要特殊处理,小的溢出就当作0处理。
强制类型转换:有时候,我们需要把一种类型的数转换成另一种类型,比如把字符转换成整数,或者把整数转换成浮点数。这个过程中可能会丢失一些数据,或者因为精度不够而出现误差。
边界对齐:为了让数据存储得更整齐,有时候需要在数据前后加一些空白,虽然这样会浪费一些空间,但是可以让计算机处理起来更快。
数据存储方式:
大端方式:数据是按照从大头到小头的顺序存储的。
小端方式:数据是按照从小到大头的顺序存储的。

ad655df4743b449f99caf48065c15563.jpg

 

知识点链接


对阶:在进行浮点数的加减运算之前,需要将两个浮点数的阶码(即指数部分)对齐。如果阶码较小的浮点数的尾数需要右移以对齐阶码,那么在右移的同时,阶码增加1。这个过程会重复进行,直到两个数的阶码相等。
尾数求和:在阶码对齐之后,按照定点数的加减规则对两个浮点数的尾数进行运算。
规格化:浮点数运算后的尾数需要进行规格化处理,以确保尾数的第一位是1。对于正数,如果尾数第一位不是1,则需要右移尾数,并将阶码增加1;对于负数,如果尾数第一位不是1,也需要进行相应的右移和阶码调整。
左规和右规:
左规:当尾数出现连续的零(00.0XXX)或连续的1(11.1XXX),需要将尾数左移,同时将阶码减1,直到尾数的第一位是1。
右规:如果尾数求和结果导致溢出(即尾数第一位是10或01),则需要将尾数右移一位,并将阶码增加1。
舍入:在浮点数运算中,可能会涉及到尾数的舍入处理,这里提到了两种方法:
0舍1入法:如果尾数右移时,移去的最高数值位为0,则直接舍去;如果为1,则尾数末位加1。
恒置1法:不论尾数右移时丢掉的最高数值位是1还是0,都将尾数末位恒置为1。
溢出判断:如果经过右规处理后,尾数仍然溢出,则视为真正的溢出。对于上溢出,需要进入中断处理;对于下溢出,则按机器零处理。
强制类型转换:文档还提到了不同数据类型之间的转换,如char到int,int到unsigned,以及int到float。这些转换可能会因为溢出或精度损失导致数据丢失。
边界对齐:为了满足字节、半字、字的存储要求,数据可能需要通过填充空白进行对齐,虽然这会浪费一些存储空间,但可以提高指令和数据的取速度。
数据的“大端方式”和“小端方式”存储:
大端方式:数据从最高有效字节到最低有效字节的顺序存储。
小端方式:数据从最低有效字节到最高有效字节的顺序存储。

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值