浮点数表示及运算.
- 格式:ppt
- 大小:607.00 KB
- 文档页数:54
浮点数的运算方法浮点数是计算机中一种表示实数的数据类型,其特点是可以表示带有小数部分的数字。
在进行浮点数的运算时,需要考虑到浮点数的精度问题、舍入误差以及运算顺序等因素。
浮点数的表示方法为:±m×be,其中m为尾数(即小数部分的数值),b为基数或底数,e为指数(表示位移的量)。
1.浮点数加法运算:-对两个浮点数的指数进行比较,将较小指数的浮点数的尾数左移指数之差的位数,使两个浮点数的小数点对齐。
-对齐后的尾数相加,得到一个和。
-对和进行规格化,即将结果的尾数进行处理,使其满足指定的位数限制。
-对规格化后的结果进行舍入运算,得到最终结果。
2.浮点数减法运算:-先将减数的指数调整与被减数的指数相等。
-对齐后的尾数相减,得到一个差。
-对差进行规格化和舍入运算,得到最终结果。
3.浮点数乘法运算:-将两个浮点数的指数相加,得到加法的和,并相应地调整两个浮点数的尾数。
-尾数相乘,得到一个乘积。
-对乘积进行规格化和舍入运算,得到最终结果。
4.浮点数除法运算:-将被除数的指数减去除数的指数,得到差,并相应地调整两个浮点数的尾数。
-尾数相除,得到一个商。
-对商进行规格化和舍入运算,得到最终结果。
在进行浮点数运算时需要注意一些问题:-浮点数的精度问题:由于浮点数的尾数有限位数,所以会存在精度丢失的问题。
这就意味着进行浮点数运算时,可能会出现舍入误差,导致结果有微小的偏差。
-运算顺序:浮点数的运算顺序可能会影响最终结果。
在连续进行多次浮点数运算时,可能会得到不同的结果。
这是因为浮点数的运算不满足交换律和结合律。
因此,在编程中需要谨慎选择运算顺序,以避免结果的不确定性。
-溢出和下溢问题:由于浮点数的范围限制,可能会出现溢出(结果超出浮点数的表示范围)或下溢(结果过小,无法表示)的情况。
针对这些情况,需要进行特殊处理,如返回特定的错误码或进行科学计数法表示。
在实际编程中,可以使用编程语言提供的浮点数运算库或内置函数来进行浮点数运算,以确保运算结果的准确性和可靠性。
浮点数的表示方法
一、浮点数表示
一个数的浮点形式(设基数是2)可写成:
N = M × 2E
其中:M代表尾数,E代表阶码。
计算机中浮点数只用尾数和阶码表示,其形式如下:
浮点数的精度由尾数决定,数的表示范围由阶码的位数决定。
为了最大限度提高精度,尾数采用规格化形式,既1/2≤M<1。
采用二进制表示时,若尾数大于零,则规格化数应该是01XXXX的形式;若尾数小于零,则规格化数应为10XXXX的形式。
二、机器零
当浮点数的尾数为0或阶码为最小值时,计算机通常把该数当作零,因此程序中进行浮点运算时,判断某数是否为零,通常可以用小于某个极小值来代替。
三、实例
【例1】设X=0.0110×23 ,用补码、浮点数形式表示阶码为X j=011,尾数为00110,这时由于X 尾数不符合01XXXX的形式,因此不是规格化数,必须先进行规格化处理。
方法:若尾数小于1/2,把尾数左移一位(不包括符号位),观察结果是否满足规格化条件,满足则在把阶码减1即可,否则继续左移和调整阶码;若尾数大于1,则把尾数右移一位(不包括符号位),观察结果是否满足规格化条件,满足则在把阶码加1即可,否则继续右移和调整阶码。
上例中,00110左移一位为01100,符合规则化标准,此时阶码减1,为010即得到浮点表示形式。
这个数具体在计算机中如何表示要看计算机中规定的阶码和尾数的位数,若阶码和尾数均为16位,则上面的数X在计算机内部表示就是00000000000000100110000000000000 ,不足
均用零填充。
浮点数的表示与运算一、选择1、在规格化浮点数运算中,若浮点数为25×1.10101,其中尾数为补码表示,则该数需将尾数左移一位规格化2、浮点数格式如下:1位阶符,6位阶码,1位数符,8位尾数。
若阶码用移码,尾数用补码表示,则浮点数所能表示数的范围是-263 ~(1-2-8)×2633、某浮点机,采用规格化浮点数表示,阶码用移码表示(最高位代表符号位),尾数用原码表示。
下列哪个数的表示不是规格化浮点数?(B )阶码尾数A.11111111,1.1000 (00)B.0011111,1.0111 (01)C.1000001,0.1111 (01)D.0111111,0.1000 (10)4、设浮点数阶的基数为8,尾数用模4补码表示。
试指出下列浮点数中哪个是规格化数?(C )A.11.111000B.00.000111C.11.101010D.11.1111015、按照IEEE654标准规定的32位浮点数(41A4C000)16对应的十进制数是( D )A.4.59375B.-20.59375C.-4.59375D.20.593756、如果某单精度浮点数、某原码、某补码、某移码的32位机器数为0xF0000000。
这些数从大到小的顺序是移>补>原>浮7、假定采用IEEE754标准中的单精度浮点数格式表示一个数为45100000H,则该数的值是(+1.125)10×2118、设浮点数共12位。
其中阶码含1位阶符共4位,以2为底,补码表示:尾数含1位数符共8位,补码表示,规格化。
则该浮点数所能表示的最大正数是27-19、如果浮点数的尾数用补码表示,则下列(D )中的尾数是规格化数形式。
A. 1.11000B. 0.01110C. 0.01010D.1.0001010、设浮点数的基数为4,尾数用原码表示,则以下(C )是规格化的数。
A. 1.001101B.0.001101C.1.011011D.0.00001011、已知X=00.875×21,Y=0.625×22,设浮点数格式为阶符1位,阶码2位,数符1位,尾数3位,通过补码求出Z=X-Y 的二进制浮点数规格化结果是0111 01112、IEEE754标准中的舍入模式可以用于二进制数也可以用于十进制数,在采用舍入到最接近且可表示的值时,若要舍入两个有效数字形式,(12.5)D应该舍入为1213、下列关于舍入的说法,正确的是(E )A.不仅仅只有浮点数需要舍入,定点数在运算时也可能要舍入B. 在浮点数舍入中,只有左规格化时可能要舍入C. 在浮点数舍入中,只有右规格化时可能要舍入二、综合应用题1、什么是浮点数的溢出?什么情况下发生上溢出?什么情况下发生下溢出?2、现有一计算机字长32位(D31~D0),数符位是第31位。
浮点数的表示和基本运算1 浮点数的表示通常,我们可以用下面的格式来表示浮点数S P M其中S是符号位,P是阶码,M是尾数对于IBM-PC而言,单精度浮点数是32位(即4字节)的,双精度浮点数是64位(即8字节)的。
两者的S,P,M所占的位数以及表示方法由下表可知S P M 表示公式偏移量1 8 23 (-1)S*2(P-127)*1.M 1271 11 52 (-1)S*2(P-1023)*1.M 1023以单精度浮点数为例,可以得到其二进制的表示格式如下S(第31位) P(30位到23位) M(22位到0位)其中S是符号位,只有0和1,分别表示正负;P是阶码,通常使用移码表示(移码和补码只有符号位相反,其余都一样。
对于正数而言,原码,反码和补码都一样;对于负数而言,补码就是其绝对值的原码全部取反,然后加1.)为了简单起见,本文都只讨论单精度浮点数,双精度浮点数也是用一样的方式存储和表示的。
2 浮点数的表示约定单精度浮点数和双精度浮点数都是用IEEE754标准定义的,其中有一些特殊约定。
(1)当P = 0, M = 0时,表示0。
(2)当P = 255, M = 0时,表示无穷大,用符号位来确定是正无穷大还是负无穷大。
(3)当P = 255, M != 0时,表示NaN(Not a Number,不是一个数)。
当我们使用.Net Framework的时候,我们通常会用到下面三个常量Console.WriteLine(float.MaxValue); // 3.402823E+38Console.WriteLine(float.MinValue); //-3.402823E+38Console.WriteLine(float.Epsilon); // 1.401298E-45//如果我们把它们转换成双精度类型,它们的值如下Console.WriteLine(Convert.ToDouble(float.MaxValue)); // 3.40282346638529E+38Console.WriteLine(Convert.ToDouble(float.MinValue)); //-3.40282346638529E+38Console.WriteLine(Convert.ToDouble(float.Epsilon)); // 1.40129846432482E-45那么这些值是如何求出来的呢?根据上面的约定,我们可以知道阶码P的最大值是11111110(这个值是254,因为255用于特殊的约定,那么对于可以精确表示的数来说,254就是最大的阶码了)。
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”。
x×y=2(E x+E y)·(M x×M y)x÷y=2(E x-E y)·(M x÷M y)浮点乘法、除法运算2.6.2 浮点乘法、除法运算 1.浮点乘法、除法运算规则设有两个浮点数x和y: x=2E x·M x y=2E y·M y浮点乘法运算的规则是(2.40)即乘积的尾数是相乘两数的尾数之积,乘积的阶码是相乘两数的阶码之和。
当然,这⾥也有规格化与舍⼊等步骤。
浮点除法运算的规则是(2.41)商的尾数是相除两数的尾数之商,商的阶码是相除两数的阶码之差。
也有规格化和舍⼊等步骤。
2.浮点乘、除法运算步骤浮点数的乘除运算⼤体分为四步: 第⼀步,0 操作数检查;第⼆步,阶码加/减操作;第三步,尾数乘/除操作;第四步,结果规格化及舍⼊处理。
(1) 浮点数的阶码运算 对阶码的运算有+1、-1、两阶码求和、两阶码求差四种,运算时还必须检查结果是否溢出。
在计算机中,阶码通常⽤补码或移码形式表⽰。
补码运算规则和判定溢出的⽅法,前⾯已经讲过。
这⾥只对移码的运算规则和判定溢出的⽅法进⾏讲解。
移码的定义为 [x]移=2n +x 2n >x≥-2n 按此定义,则有 [x]移+[y]移=2n +x+2n +y =2n +(2n +(x+y)) =2n +[x+y]移 即直接⽤移码实现求阶码之和时,结果的最⾼位多加了个1,要得到正确的移码形式结果,必须对结果的符号再执⾏⼀次求反。
当混合使⽤移码和补码时,考虑到移码和补码的关系:对同⼀个数值,其数值位完全相同,⽽符号位正好完全相反。
⽽[y]补的定义为 [y]补=2n +1+y则求阶码和⽤如下⽅式完成:[x+y]移=[x]移+[y]补 (mod 2n +1)[x-y]移=[x]移+[-y]补 [x]移+[y]补=2n +x+2n +1+y =2n +1+(2n +(x+y))即(2.42)同理(2.43) 上⼆式表明执⾏阶码加减时,对加数或减数 y来说,应送移码符号位正常值的反码。
c语言浮点数合法规则C语言浮点数合法规则在C语言中,浮点数是一种用来表示小数的数据类型。
浮点数的合法规则是指浮点数的定义和使用必须符合一定的规范和限制。
下面将详细介绍C语言浮点数的合法规则。
1. 浮点数的表示形式:C语言中的浮点数通常由三部分组成:符号位(正号或负号)、尾数和指数。
其中,尾数通常是一个小数,指数表示10的幂。
例如,1.23E-4是一个合法的浮点数。
2. 浮点数的数据类型:C语言中提供了两种浮点数的数据类型:float和double。
其中,float类型可以表示的范围较小,精度较低,而double类型可以表示的范围更广,精度更高。
根据实际需求,可以选择合适的数据类型来定义浮点数。
3. 浮点数的取值范围:float类型的浮点数的取值范围通常为±1.17549435E-38到±3.40282347E+38,而double类型的浮点数的取值范围通常为±2.2250738585072014E-308到±1.7976931348623158E+308。
超出这个范围的浮点数将被认为是无穷大(inf)或非数(NaN)。
4. 浮点数的精度:浮点数的精度是指浮点数表示的小数部分的位数。
float类型的浮点数通常有6位有效数字,而double类型的浮点数通常有15位有效数字。
超出这个精度的小数部分将被截断或四舍五入。
5. 浮点数的运算:在C语言中,浮点数的运算遵循一定的规则。
当两个浮点数相加、相减、相乘或相除时,会根据浮点数的表示形式和精度进行相应的运算。
需要注意的是,在浮点数的运算中可能会出现舍入误差,导致计算结果不完全准确。
6. 浮点数的比较:由于浮点数的表示形式和精度的限制,直接比较两个浮点数的相等性是不可靠的。
在C语言中,通常使用浮点数的差值的绝对值来判断两个浮点数是否相等。
例如,如果fabs(a - b) < 1e-6,则认为a和b相等。
7. 浮点数的类型转换:在C语言中,可以通过强制类型转换将一个浮点数转换成另一个浮点数类型。
计算机基础知识了解计算机中的浮点数表示和运算计算机基础知识:了解计算机中的浮点数表示和运算计算机科学中的浮点数是非常重要的一部分。
在许多计算机应用中,浮点数被用来表示和计算具有小数点的数值。
了解浮点数的表示方法和运算规则,对于理解计算机中数字处理的原理和特性非常有帮助。
本文将介绍计算机中浮点数的表示和运算规则。
一、浮点数表示方法在计算机中,浮点数采用科学记数法的方式进行表示。
它由两部分组成:尾数和指数。
尾数部分是一个二进制小数,通常将其规范化为1.xxxxxx的形式。
这个小数点的位置可以通过指数进行调整。
指数部分是一个带符号的整数,用于表示小数点在尾数中的位置。
正指数表示小数点向右移动,负指数表示小数点向左移动。
通过将尾数和指数组合起来,就可以表示任意大小和精度的浮点数。
二、浮点数运算规则在计算机中,浮点数的运算遵循一定的规则,包括加法、减法、乘法和除法等。
1. 加法和减法当进行浮点数加法或减法时,首先需要将两个浮点数的指数进行比较,并将较小的指数调整为与较大指数相等,同时也需要相应地调整尾数。
接下来,将调整后的尾数进行相加或相减,并根据结果进行规范化和舍入。
2. 乘法在浮点数乘法中,首先将两个浮点数的尾数进行相乘,并将结果进行规范化。
然后将两个浮点数的指数相加,得到最终结果的指数。
最后,根据指数的差异进行舍入和溢出的处理。
3. 除法在浮点数除法中,首先将两个浮点数的尾数进行相除,并将结果进行规范化。
然后将两个浮点数的指数相减,得到最终结果的指数。
最后,根据指数的差异进行舍入和溢出的处理。
三、浮点数的精度问题由于计算机中浮点数的表示是有限的,所以在进行运算时会存在精度的损失。
这是由于计算机在表示小数时只能采用有限的二进制位数。
例如,当两个非常接近的浮点数进行相减时,可能会因为精度限制而得到一个极小的非零值,这种情况被称为舍入误差。
此外,在进行大数和小数的运算时,可能会出现溢出或下溢的问题。
溢出是指计算结果超出了浮点数的表示范围,而下溢是指计算结果过小而无法表示。
浮点数的表示与运算
浮点数的表示和运算涉及到计算机内部对实数的二进制表示以及相关的运算规则。
在计算机中,浮点数一般采用 IEEE 754 浮点数标准进行表示。
这个标准规定了浮点数的二进制表示、舍入规则以及基本运算规则。
1. 浮点数的表示:
IEEE 754 浮点数标准规定了浮点数的二进制表示形式,主要包括三个部分:符号位、指数位和尾数位。
一个浮点数表示为:(127)(1) 1.2S E M −−⨯⨯
• S 是符号位,1位,0 表示正数,1 表示负数。
• M 是尾数(也称为尾数部分或尾数位),通常为23位。
• E 是指数,8位。
2. 浮点数的运算:
浮点数的运算包括加法、减法、乘法、除法等。
在进行浮点数运算时,需要注意以下几点:
• 舍入误差: 浮点数的表示范围是有限的,因此在运算中可能会出现舍入误差,导致最终结果的精度不准确。
• 溢出和下溢: 运算可能导致结果超出浮点数表示范围,这称为溢出;结果太接近零而无法表示,称为下溢。
• 运算顺序: 浮点数运算的顺序可能影响结果。
由于浮点数的有限精度,运算的顺序可能导致不同的舍入误差。
•特殊值处理:浮点数标准定义了特殊值,如正无穷大、负无穷大、NaN(Not a Number),在运算中需要适当处理这些特殊值。
在实际应用中,为了减小舍入误差,可能需要使用高精度库或者一些优化技巧,同时在编写代码时需要注意规避可能导致溢出和下溢的情况。
另外,对于一些对精度要求较高的场景,可能需要谨慎选择算法和数据结构。