1、计算机科学引论浮点数表示与运算浮点数表示与运算2为什么讲浮点数l浮点数是程序中常用的数浮点数是程序中常用的数l浮点数是计算机技术中设计非常精巧的一个例浮点数是计算机技术中设计非常精巧的一个例子子l浮点数的一些设计思想被应用到计算机科学的浮点数的一些设计思想被应用到计算机科学的其它领域其它领域3数的表示l计算机是处理计算机是处理“数数”的的 数必须表示成计算机认识的格式数必须表示成计算机认识的格式lN位整数的表示位整数的表示 无符号:原码无符号:原码 0(2N1)有符号:补码有符号:补码(2N1)()(2N11)4数的表示l其它的数怎么办?其它的数怎么办?特别大的数:一个世纪的秒数特别大的数:一
2、个世纪的秒数 3,155,760,00010(3.1557610 x 109)非常小的数:原子的直径非常小的数:原子的直径 0.0000000110(1.010 x 10-8)分数分数 2/3 (0.666666666.)无理数无理数 21/2(1.414213562373.),e(2.718.),(3.141.)l都是科学技术上常用的数都是科学技术上常用的数5数的表示l科学技术上数的表示科学技术上数的表示 科学记数法科学记数法+/-6.020000 x 1023基基 小数点小数点 尾数尾数阶阶位数:运算可用精度符号符号6数的表示l科学记数法科学记数法 有一个有一个定长定长尾数尾数 小数小数
3、有一个固定的基有一个固定的基 10:尾数的进制:尾数的进制 有一个阶有一个阶 有符号整数有符号整数 有一个符号有一个符号+阶增减1相当于尾数小数点右移/左移一位同一个数有多个表示形式7数的表示l科学记数法科学记数法 规一化要求:规一化要求:1 尾数尾数10 规一化的:规一化的:1.0 x 10-9 未规一化的:未规一化的:0.1 x 10-8,10.0 x 10-10 规一化规一化0 .1 x 10-8 1 0 .0 x 10-10-1+1进制8数的表示l科学记数法科学记数法 归一化科学归一化科学记数法记数法特点特点 尾数长度决定了数的运算可用精度尾数长度决定了数的运算可用精度 简称精度简称精
4、度 阶增减阶增减1相当于尾数小数点右移相当于尾数小数点右移/左移一位左移一位 归一化算法简单归一化算法简单 比较大小的算法比较大小的算法 先比较符号先比较符号 符号相同的再比较阶符号相同的再比较阶 符号和阶都相同,再比较尾数符号和阶都相同,再比较尾数9数的表示l二进制二进制科学记数法科学记数法 计算机只能使用二进制计算机只能使用二进制 所以计算机用二进制科学记数法所以计算机用二进制科学记数法 浮点数浮点数+/-1.02 x 2-1基基 “小数点小数点”尾数尾数阶阶符号符号2210数的表示l二进制二进制科学记数法科学记数法 表示符号表示符号+/-:一位二进制数表示:一位二进制数表示 表示阶表示阶
5、 有符号整数有符号整数 表示基?表示基?固定为固定为2:不需要表示:不需要表示 表示尾数表示尾数 二进制小数:如何表示?二进制小数:如何表示?11二进制小数的表示l 二进制小数二进制小数 带小数点的二进制数:带小数点的二进制数:101.012l二进制小数的值二进制小数的值122+021+120+02-1+12-2-1-1-1=5.2512二进制小数的表示l十进制小数转换成二进制小数十进制小数转换成二进制小数5.3101.?0.32=0.60.62=1.2010.22=0.400.42=0.80 1 1 0 0010有限十进制小数不一定能转换成有限二进制小数!13二进制小数的表示l表示精度问题表
6、示精度问题 计算机不可能表示真正的实数计算机不可能表示真正的实数 无理数无理数 21/2(1.414213562373.),e(2.718.),(3.141.)分数分数 2/3,5/7,某些有限十进制数小数无法转换成有限二进制小数某些有限十进制数小数无法转换成有限二进制小数 0.3 实际的科学计算也不需要真正的实数实际的科学计算也不需要真正的实数 解决办法:解决办法:量化量化14量化l量化量化 把需要表示的区间划分成整数个格子,要表示的把需要表示的区间划分成整数个格子,要表示的实数向最近的格子边界靠实数向最近的格子边界靠-2 -1 0 1 2-1.75+1.5量化误差-1.112+1.102二
7、位二进制小数表示精度0.25用更多位可以实现更高精度码点15量化l量化量化 N位二进制数:有位二进制数:有2N个个码点码点 均匀量化:任意二个均匀量化:任意二个相邻相邻码点之间的距离相等码点之间的距离相等 可以表示的范围可以表示的范围:D2NL例:如需要的精度L10-30,N32 则D4.310-21 可以表示-210-21 210-21 连一个原子的半径都不能表示16量化l实际使用情况例(单位:米)实际使用情况例(单位:米)有关原子半径的运算有关原子半径的运算 需要精确到约需要精确到约10-20 需要表示的范围约需要表示的范围约10-5 有关丈量土地的运算有关丈量土地的运算 需要精确到约需要
8、精确到约10-1 需要表示的范围约需要表示的范围约103 有关地理运算有关地理运算 需要精确到约需要精确到约102 需要表示的范围约需要表示的范围约108如何在一个格式的数中满足所有这些要求17量化l实际使用情况总结实际使用情况总结 需要的精度越高时,需要表示的范围也越小需要的精度越高时,需要表示的范围也越小 越接近越接近0,需要表示的精度越高,需要表示的精度越高l解决方案解决方案 非均匀非均匀量化量化 越接近越接近0,量化越密;越远离,量化越密;越远离0,量化越粗,量化越粗18量化l数的表示精度与运算可用精度数的表示精度与运算可用精度 表示精度:量化误差表示精度:量化误差 变化的(非均匀量化
9、)变化的(非均匀量化)在确定了阶的值后,由尾数位数确定在确定了阶的值后,由尾数位数确定 运算可用精度运算可用精度 固定的:由尾数位数确定固定的:由尾数位数确定所以尾数位数被一般性地叫做“精度”19量化l如何实现非均匀量化如何实现非均匀量化 科学记数法科学记数法 无论阶的值是多少,尾数的位数是固定的无论阶的值是多少,尾数的位数是固定的 尾数的位数确定了在相邻两个阶之间有几个码点尾数的位数确定了在相邻两个阶之间有几个码点 例:二位十进制科学记数法例:二位十进制科学记数法100 101 102 1031.09.9x100100个1.09.9x102100个1.09.9x101100个20浮点数l浮点
10、数:二进制科学记数法浮点数:二进制科学记数法 规一化要求:规一化要求:1 尾数尾数21038)(上)溢出(上)溢出l如果结果太小?(如果结果太小?(0v,5.0/0 可以给出正确的答案,而不一定产生溢出可以给出正确的答案,而不一定产生溢出lsqrt(-5.0)?0.0/0.0?既然既然5.0/0可以有正确的结果,这里也应该有可以有正确的结果,这里也应该有 NaN:Not a Number 阶全阶全1,尾数,尾数 037浮点数:IEEE754l32位浮点数小结位浮点数小结阶阶尾数尾数值值00+/-00非非0?1-254任意任意+/-浮点数浮点数2550+/-255非非0NaN38浮点数:IEEE
11、754l现有格式存在的问题现有格式存在的问题 可表示的最小正数可表示的最小正数a=1.0 2*2-126=2-126 可表示的第二小正数可表示的第二小正数b=1.0001 2*2-126=2-126+2-149a-0=2-126 b-a=2-149ba0+-39浮点数:IEEE754l解决办法解决办法 阶阶0,尾数,尾数 0还未使用还未使用 定义此时的有效值为:定义此时的有效值为:+/-0.xxxxxxxx22-126 此时此时 最小正数:最小正数:0.0.0122-126=2-149 第二小正数:第二小正数:0.0.1022-126=2-1480+-40浮点数:IEEE754l舍入舍入 为何
12、需要舍入为何需要舍入 实数的运算结果:实数的运算结果:无限无限精度精度 不可能被计算机表示不可能被计算机表示 计算机的浮点数是运算结果的计算机的浮点数是运算结果的近似值近似值 必须把运算结果映射到浮点数可以表示的某个必须把运算结果映射到浮点数可以表示的某个码点码点上上 此操作称为此操作称为“舍入舍入”实数到整数的变换(取整运算)实数到整数的变换(取整运算)要映射到整数可以表示的要映射到整数可以表示的某个某个码点上码点上 舍入舍入41舍入(round)方法l恒舍(恒舍(round down,round towards-inf)1.999-1,-1.999-2l恒入(恒入(round up,round towards+inf)1.999-2,-1.999-1l截断(截断(truncate,round towards 0)1.999-1-1.999-142舍入方法l四舍五入(就近舍入,四舍五入(就近舍入,round to nearest)1.999-2-1.400-1如果正好在中点?l舍入到最近舍入到最近偶偶数数 2.500000-2 3.500000-4一般的缺省舍入方式