浮点数运算
- 格式:doc
- 大小:54.75 KB
- 文档页数:5
浮点数的运算方法浮点数是计算机中一种表示实数的数据类型,其特点是可以表示带有小数部分的数字。
在进行浮点数的运算时,需要考虑到浮点数的精度问题、舍入误差以及运算顺序等因素。
浮点数的表示方法为:±m×be,其中m为尾数(即小数部分的数值),b为基数或底数,e为指数(表示位移的量)。
1.浮点数加法运算:-对两个浮点数的指数进行比较,将较小指数的浮点数的尾数左移指数之差的位数,使两个浮点数的小数点对齐。
-对齐后的尾数相加,得到一个和。
-对和进行规格化,即将结果的尾数进行处理,使其满足指定的位数限制。
-对规格化后的结果进行舍入运算,得到最终结果。
2.浮点数减法运算:-先将减数的指数调整与被减数的指数相等。
-对齐后的尾数相减,得到一个差。
-对差进行规格化和舍入运算,得到最终结果。
3.浮点数乘法运算:-将两个浮点数的指数相加,得到加法的和,并相应地调整两个浮点数的尾数。
-尾数相乘,得到一个乘积。
-对乘积进行规格化和舍入运算,得到最终结果。
4.浮点数除法运算:-将被除数的指数减去除数的指数,得到差,并相应地调整两个浮点数的尾数。
-尾数相除,得到一个商。
-对商进行规格化和舍入运算,得到最终结果。
在进行浮点数运算时需要注意一些问题:-浮点数的精度问题:由于浮点数的尾数有限位数,所以会存在精度丢失的问题。
这就意味着进行浮点数运算时,可能会出现舍入误差,导致结果有微小的偏差。
-运算顺序:浮点数的运算顺序可能会影响最终结果。
在连续进行多次浮点数运算时,可能会得到不同的结果。
这是因为浮点数的运算不满足交换律和结合律。
因此,在编程中需要谨慎选择运算顺序,以避免结果的不确定性。
-溢出和下溢问题:由于浮点数的范围限制,可能会出现溢出(结果超出浮点数的表示范围)或下溢(结果过小,无法表示)的情况。
针对这些情况,需要进行特殊处理,如返回特定的错误码或进行科学计数法表示。
在实际编程中,可以使用编程语言提供的浮点数运算库或内置函数来进行浮点数运算,以确保运算结果的准确性和可靠性。
浮点数的运算方法浮点数是计算机中用于表示实数的一种数据类型,由于实数是无限的,而计算机只能存储有限的信息,所以必然存在精度误差。
浮点数的运算涉及到加法、减法、乘法和除法等基本运算,以及开方、幂函数等高级运算。
1.加法运算:浮点数相加时,先将较小的浮点数调整为与较大的浮点数相同的指数,然后进行尾数的相加,最后对结果进行规格化处理,即进行舍入操作,得到最终的结果。
2.减法运算:浮点数相减的原理与加法相同,只是在相减之前,需要将两个浮点数的指数调整为相等,然后进行尾数的相减操作,最后同样需要对结果进行规格化处理。
3.乘法运算:浮点数相乘时,将两个浮点数的指数相加,然后将尾数相乘得到结果的尾数部分,最后对结果进行规格化处理。
4.除法运算:浮点数除法的原理与乘法类似,先将两个浮点数的指数相减,然后将尾数相除得到结果的尾数部分,最后同样需要进行规格化处理。
5.开方运算:浮点数的开方运算是通过求解多项式的根来实现的,常用的方法有牛顿法、二分法和二次近似法等。
这些方法都是通过迭代的方式,逐步逼近平方根的值,直到达到所需的精度。
6.幂函数运算:浮点数的幂函数运算可以通过连乘或连乘的方式实现。
幂函数运算的精度取决于底数和指数的精度以及所需的结果精度。
在浮点数的运算过程中,需要注意以下几个常见问题:1.精度丢失:浮点数的表示是有限的,不可避免地存在精度误差,特别是在进行连续的浮点数运算时,会导致误差累积,可能导致结果的不准确。
2.舍入误差:浮点数的结果需要进行舍入操作以保持一定的精度。
舍入规则有多种,如四舍五入、向上取整、向下取整等,选择合适的舍入规则可以减小误差。
3.溢出和下溢:浮点数的范围是有限的,当计算结果超出范围时,会发生溢出;当结果接近零但无法表示时,会发生下溢。
这两种情况都需要进行特殊处理。
4. 特殊数值:浮点数中有几个特殊的数值,如无穷大(Infinity)、非数值(NaN)和零(0)。
这些特殊值的运算需要按照特定的规则进行处理,以免引起错误。
1、浮点加减法的运算步骤设两个浮点数X=Mx※2Ex Y=My※2Ey实现X±Y要用如下5步完成:①对阶操作:小阶向大阶看齐②进行尾数加减运算③规格化处理:尾数进行运算的结果必须变成规格化的浮点数,对于双符号位的补码尾数来说,就必须是001×××…×× 或110×××…××的形式, 若不符合上述形式要进行左规或右规处理。
④舍入操作:在执行对阶或右规操作时常用“0”舍“1”入法将右移出去的尾数数值进行舍入,以确保精度。
⑤判结果的正确性:即阶码是否溢出若阶码下溢(移码表示是00…0),要置结果为机器0;若阶码上溢(超过了阶码表示的最大值)置溢出标志。
例题:假定X=0 .0110011*211,Y=0.1101101*2-10(此处的数均为二进制)?? 计算X+Y;解:[X]浮:0 1010 1100110[Y]浮:0 0110 1101101符号位阶码尾数第一步:求阶差:│ΔE│=|1010-0110|=0100第二步:对阶:Y的阶码小,Y的尾数右移4位[Y]浮变为0 1010 0000110 1101暂时保存第三步:尾数相加,采用双符号位的补码运算00 1100110+00 000011000 1101100第四步:规格化:满足规格化要求第五步:舍入处理,采用0舍1入法处理故最终运算结果的浮点数格式为:0 1010 1101101,即X+Y=+0. 1101101*2102、浮点乘除法的运算步骤①阶码运算:阶码求和(乘法)或阶码求差(除法)即[Ex+Ey]移= [Ex]移+ [Ey]补[Ex-Ey]移= [Ex]移+ [-Ey]补②浮点数的尾数处理:浮点数中尾数乘除法运算结果要进行舍入处理例题:X=0 .0110011*211,Y=0.1101101*2-10求X※Y解:[X]浮:0 1 010 *******[Y]浮:0 0 110 1101101第一步:阶码相加※※2+000。
什么是浮点运算
浮点运算就是实数运算,因为计算机只能存储整数,所以实数都是约数,这样浮点运算是很慢的而且会有误差。
当我们用不同的电脑计算圆周率时,会发现一台电脑的计算较另一台来讲结果更加精确。
或者我们在进行枪战游戏的时候,当一粒子弹击中墙壁时,墙上剥落下一块墙皮,同样的场面在一台电脑上的表现可能会非常的呆板、做作;而在另外一台电脑上就会非常生动形象,甚至与我们在现实中看到的所差无几。
这都是浮点运算能力的差异导致的。
如果是实数的话,就不是这样了,机器有两种办法表示实数,一种是定点,就是小数点位置是固定的,一种是浮点,就是小数点位置不固定,计算方法也比较麻烦,通常会比整数运算代价大很多。
计算机里整数和小数形式就是按普通格式进行存储,例如1024、3. 1415926等等, 这个没什么特点,但是这样的数精度不高,表达也不够全面,为了能够有一种数的通用表示法,就发明了浮点数。
浮点数的表示形式有点像科学计数法,例如1024就能表示成0.1024X 10^4, 3. 1415926就能表示成0.31415926X10],这就是浮点数。
浮点数进行的运算就是浮点运算。
浮点运算比常规运算更复杂,因此计算机进行浮点运算速度要比进行常规运算慢得多。
2.5浮点运算与浮点运算器2.5.1浮点数的运算规则浮点数的形式X=Mx * 2E x▲ 尾数的右移: 若尾数是原码表示,每右移一位,符号位不参加移位,尾数高位补0;若尾数是补码表示,每右移一位,符号位参加右移,并保持补码的符号不变。
一、浮点加法和减法设有两个浮点数:X=Mx * 2E x Y=My * 2E y它们的加减步骤是:1、对阶——使两个数的阶码相等,才能进行尾数的加减。
对阶原则——小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移),每右移一位,其阶码加1,直到两数的阶码相等为止,右移的位数等于阶差△E 。
例1:两浮点数X=201*0.1101, Y=211*(-0.1010),将两个数对阶。
解:假设两数在计算机中以补码表示。
[△E]补=[Ex]补 – [Ey]补=[Ex]补 + [–Ey]补=00 01 + 11 01=11 10即△E=-2,表示Ex 比Ey 小2,因此将X 的尾数右移2位:右移一位,得[X]浮=00 10,00.0110再右移一位,得[X]浮=00 11,00.0011对阶完毕。
2、尾数求和+ 尾数和为:3、规格化(1)对于补码来说 规格化(2)规格化的方法浮点数的尾数相加后得到补码的形式M ,对比符号位和小数点后的第一位,如果它们不等,即为00. 1…和11. 0…的形式,就是规格化的数;如果它们相等,即00. 0…或11. 1…,就不是规格化的数,此时要进行左规格化,或左规。
向左规格化——尾数左移1位,阶码减1。
当结果出现01.…或10. …的形式时,要进行右规格化,或右规。
00 001111 011011 1001 正数:00. 1… 负数:11. 0…向右规格化——尾数右移1位,阶码加1。
4、舍入在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定的误差,因此要进行舍入处理。
舍入的方法——“0舍1入”:如果右移时,被丢掉数位的最高位是0则舍去,反之则将尾数的末位加“1”。
什么是浮点数:
在微型机中,小数点的位置不是固定不变的,而是可以变动的,这种表示法成为浮点表示法。
用浮点表示法表示的实数,叫做浮点数。
为了扩大数的表示范围或精度,小型机和高档机一般都采用浮点表示法。
2E M N ±⨯±=
任意一个二进制数N 总可以表示如下:,其中M 称为尾数,是纯二进制小数,指出数N 的全部有效位。
尾数前面的一位符号称为数符,表示数的正、负:E 称为阶码,它前面的符号称为阶符,指明尾数小数点向右或向左浮动,而阶码E 指明尾数小数点移动的位置,所以阶符和阶码表明了数值N 小数点的位置。
这种小数点位置随E 的符号和大小而浮动的方法,就是二进制数的浮点表示法,它表示的数,就叫做二进制浮点数。
在微型机中,阶符与数符为0表示正,为1表示负。
浮点数的一般表示格式如下: 阶符 阶码E
数符 尾数N 通常规定:二进制浮点数,其尾数数字部分原码的最高位为1,叫做规格化表示法,例如,0.0010101可表示为221010100.0⨯,
称为规格化浮点数,其中阶符为1,阶码E 为0010,数符为0,尾数为1010100。
这样,要扩大数的表示范围,就增加阶码的位数,要提高精度,就增加尾数的位数。
这就是浮点表示法的优势。
32位浮点加法器的设计思路:
从上述对浮点数的分析中,我们可以明确对32位浮点加法器的设计思路:
设有两个浮点数x 和y ,它们分别为:M x Ex x ∙=2和M y Ey
y ∙=2 两浮点数进行加法和减法的运算规则是 22)(Ey
y Ey Ex x M M y x ±=±- 其中,Ex 、Ey 分别为x 、y 的阶码,Sx 、Sy 分别为的尾数。
完成浮点加减运算的操作过程大体分为四步:
1. 0 操作数的检查;
2. 比较阶码大小并完成对阶;
3. 尾数进行加或减运算;
4. 结果规格化并进行舍入处理。
1.0操作数检查
浮点加减运算过程比定点运算过程复杂。
如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作,以节省时间。
0操作数检查步骤则用来完成这一功能。
2.对阶
两浮点数进行加减,首先要看两数的阶码是否相同,即小数点位置是否对齐。
若两数阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算。
反之,若两数阶码不同,表示小数点位置没有对齐,此时必须使两数的阶码相同,这个过程叫做对阶。
要对阶,首先应求出两数阶码E x和E y之差,即:
△x = E x - E y
若E x = E y,表示两数阶码相等,不需改变两数的阶码;若E x ≠ E y,要通过尾数的移位以改变E x或E y,使之相等。
由于浮点表示的数多是规格化的,尾数左移会引起最高有产位的丢失,造成很大误差;而尾数右移虽引起最低有效位的丢失,但造成的误差较小,因此,对阶操作规定使尾数右移,尾数右移后使阶码作相应增加,其数值保持不变。
很显然,一个增加后的阶码与另一个相等,所增加的阶码一定是小阶。
因此在对阶时,总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移),每右移一位,其阶码加1,直到两数的阶码相等为止,右移的位数等于阶差△E。
3.尾数求和
对阶完毕后就可对尾数求和。
不论是加法运算还是减法运算,都按加法进行操作,其方法与定点加减运算完全一样。
4.规格化
当尾数用二进制表示时,浮点规格化的定义是尾数M应满足:
1/2 ≤ |M|<1显然对于正数而言,有M = 00.1φφ…φ;对于负数,其补码形式为11.0φφ…φ。
这样,当进行补码浮点加减运算时,只要对运算结果的符号位和小数点后的第一位进行比较:如果它们不等,即为00.1φφ…φ或11.1φφ…φ,就是规格化的数;如果它们相等,即为00.0φφ…φ或11.0φφ…φ,就不是规格化的数,在这种情况下需要尾数左移以实现规格化的过程,叫做向左规格化。
规则是:尾数左移1位,阶码减1。
在浮点加减运算时,尾数求和的结果也可以得到01.φφ…φ或10.φφ…φ,即两符号位不相等,在这定点加减运算中称为溢出,是不允许的。
但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。
此时将尾数运算结果右移以实现规格化表示,称为向右规格化,即尾数右移1位,阶码加1。
5.舍入
在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。
常用的舍入方法有两种:一种是“0舍1入”法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位加“1”,另一种是“恒置1”,即只要数位被移掉,就在尾数的末位恒置“1”。
6.溢出处理
浮点数的溢出是以其阶码溢出表现出来的。
在加、减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应的处理:若阶码下溢,要置运算结果为浮点形式的机器0;若阶码上溢,则置溢出标志。
start 分离指数尾数,同时还原尾数 ix=0或iy=0 阶码加1尾数右移1位 阶码相同 oz=ix 或oz=iy
oz=另一数
尾数相加(符号数)
尾数=0? 尾数=0?
规格化处理舍入处理 结束 oz=iy oz=ix 是
是 是
是 否
否 否。