第九章(浮点算法)40

合集下载

浮点数的运算方法

浮点数的运算方法

浮点数的运算方法浮点数是计算机中一种表示实数的数据类型,其特点是可以表示带有小数部分的数字。

在进行浮点数的运算时,需要考虑到浮点数的精度问题、舍入误差以及运算顺序等因素。

浮点数的表示方法为:±m×be,其中m为尾数(即小数部分的数值),b为基数或底数,e为指数(表示位移的量)。

1.浮点数加法运算:-对两个浮点数的指数进行比较,将较小指数的浮点数的尾数左移指数之差的位数,使两个浮点数的小数点对齐。

-对齐后的尾数相加,得到一个和。

-对和进行规格化,即将结果的尾数进行处理,使其满足指定的位数限制。

-对规格化后的结果进行舍入运算,得到最终结果。

2.浮点数减法运算:-先将减数的指数调整与被减数的指数相等。

-对齐后的尾数相减,得到一个差。

-对差进行规格化和舍入运算,得到最终结果。

3.浮点数乘法运算:-将两个浮点数的指数相加,得到加法的和,并相应地调整两个浮点数的尾数。

-尾数相乘,得到一个乘积。

-对乘积进行规格化和舍入运算,得到最终结果。

4.浮点数除法运算:-将被除数的指数减去除数的指数,得到差,并相应地调整两个浮点数的尾数。

-尾数相除,得到一个商。

-对商进行规格化和舍入运算,得到最终结果。

在进行浮点数运算时需要注意一些问题:-浮点数的精度问题:由于浮点数的尾数有限位数,所以会存在精度丢失的问题。

这就意味着进行浮点数运算时,可能会出现舍入误差,导致结果有微小的偏差。

-运算顺序:浮点数的运算顺序可能会影响最终结果。

在连续进行多次浮点数运算时,可能会得到不同的结果。

这是因为浮点数的运算不满足交换律和结合律。

因此,在编程中需要谨慎选择运算顺序,以避免结果的不确定性。

-溢出和下溢问题:由于浮点数的范围限制,可能会出现溢出(结果超出浮点数的表示范围)或下溢(结果过小,无法表示)的情况。

针对这些情况,需要进行特殊处理,如返回特定的错误码或进行科学计数法表示。

在实际编程中,可以使用编程语言提供的浮点数运算库或内置函数来进行浮点数运算,以确保运算结果的准确性和可靠性。

软考浮点数计算范文

软考浮点数计算范文

软考浮点数计算范文浮点数计算是计算机中的一种基本运算,用于处理非整数的数据。

浮点数是一种用科学计数法表示的实数,包括一个小数部分和一个指数部分。

在软考中,通常需要掌握浮点数的表示方法、浮点数运算的规则以及浮点数误差的处理方法。

一、浮点数的表示方法在计算机中,浮点数采用“符号位+尾数部分+指数部分”的格式来表示。

其中,符号位表示正负,尾数部分表示小数,指数部分表示10的指数。

浮点数的表示方法遵循IEEE754标准,有单精度和双精度两种形式。

单精度浮点数采用32位表示,其中1位表示符号位,8位表示指数部分,23位表示尾数部分。

双精度浮点数则采用64位表示,其中1位表示符号位,11位表示指数部分,52位表示尾数部分。

浮点数的表示方法使得计算机可以表示非常大或非常小的数,并且能够精确表示大范围的数。

二、浮点数运算规则浮点数的运算规则与实数的运算规则类似,但由于浮点数采用了二进制的表示方法,因此在计算机中进行浮点数运算时需要注意一些精度和舍入误差的问题。

1.加法和减法运算:浮点数的加法和减法运算遵循实数的运算规则。

首先,需要对指数进行对齐,然后进行尾数的相加或相减操作。

对于相加或相减后的结果,需要将结果规范化,包括规范化尾数和规范化指数。

2.乘法运算:浮点数的乘法运算是将两个浮点数的尾数相乘,然后将指数相加。

得到的结果需要进行规范化处理。

3.除法运算:浮点数的除法运算是将两个浮点数的尾数相除,然后将指数相减。

得到的结果需要进行规范化处理。

在浮点数运算过程中,会产生舍入误差。

舍入误差是由于计算机的存储精度有限导致的,会使得浮点数运算的结果与实际结果有一定的偏差。

三、浮点数误差的处理方法由于浮点数运算会产生舍入误差,因此在实际应用中需要对浮点数的误差进行处理。

1.舍入方式:浮点数运算中一般采用舍入方式进行结果的处理。

常见的舍入方式包括向上舍入、向下舍入和四舍五入等。

2.精度控制:在进行浮点数计算时,可以通过控制精度来降低舍入误差。

浮点数的运算方法

浮点数的运算方法
X = MX * 2
EX
X = Ms Es Em-1 ...E1 E0 M-1 M-2 ...M-n IEEE 标准:阶码用移码,基为2
按国际电子电气工程师协会规定的国际通用标准,浮点 数的阶码用整数给出,并且要用移码表示,用作为以 2为底 的指数的幂。既然该指数的底一定为 2 ,可以不必在浮点数 的格式中明确表示出来, 只需给出阶码的~+127,当阶码为-128时,其补码表 示为 00000000,该浮点数的绝对值<2-128,人们规定此浮点数的 值为零,若尾数不为 0 就清其为 0,并特称此值为机器零。 一位符号位和 n 位数值位组成的移码, 其定义为; [E]移 = 2n + E -2n<=E<2n 负数 正数 +127 表示范围: 00000000 ~ 11111111 8 位移码表示的机器数为数的真值 在数轴上向右平移了 128 个位置
注意:计算结果的阶码符号位在此变了一次反, 结果为 +6 的 移码
(2)尾数相乘:MX*MY = 0.1011*(-0.1101) = -0.10001111 (3) (4) (5) 已是规格化数, 不必舍入, 也不溢出 最众乘积 [MX]移 = 1 1110 10001111, 即 26 * (-0.10001111)
浮点数在计算机内的格式
X = MX * 2 浮点数: X = M s Es E m-1 ...E1 E 0 M-1 M-2 ...M-n IEEE 标准:尾数用原码
按国际电子电气工程师协会规定的标准,浮点数的尾数要 用原码表示,即符号位 Ms: 0 表示正,1 表示负,且非 0 值尾数 数值的最高位 M-1 必为 1, 才能满足浮点数规格化表示的要求;
(2)尾数求和:00 0011011011 + 11 01010100 11 1000101011

浮点数运算方法

浮点数运算方法


下溢时,浮点数值趋于零,故机器不做溢出处理, 仅把它作为机器零。 上溢时才是浮点数真正溢出,机器需停止运算, 作溢出中断处理。

一般所说的浮点溢出,均是指上溢。

例:设x=2-101×(-0.101000),y=2-100×(+0.111011),并假设 阶符取2位,阶码取3位,数符取2位,尾数取6位,求x-y。
对阶,使两数的小数点位置对齐。
尾数求和,将对阶后的两尾数按定点加减运算规则求和(差)。
2.
3.
规格化,为增加有效数字的位数,提高运算精度,必须将求和 (差)后的尾数规格化。
舍入,为提高精度,要考虑尾数右移时丢失的数值位。 判断结果 ,即判断结果是否溢出
4.
5.
1. 对阶
小阶向大阶看齐,阶码较小的数,其尾



首先,对每一次运算的结果而言,要保证误差不超过 给定的范围。比如,设机器尾数长39位,要求每次运 算误差不超过末位(即第39位)的“1”,即小于 2-39。 其次在大量的运算过程中要保证误差的平衡,即在每 一次运算时,由于舍入处理,可能使运算结果增大了, 也可能减少了。但总的说来,增加和减少的机会必需 是均等的,否则会产生很大的积累误差。
4. 舍入—常用的舍入方法

“0舍1入”法:“0舍1入”法类似于十进制运算 中的“四舍五入”法,即在尾数右移时,被移去 的最高数值位为0,则舍去;被移去的最高数值 位为1,则在尾数的末位加1。这样做可能使尾数 又溢出,此时需再做一次右规。

特点:最大误差是最低位上的-1/2到接近于1/2之间, 正误差可以和负误差抵消。属于比较理想的方法,但 实现起来比较复杂。

为了使原码、补码舍入处理后的结果相同,对负数的补码可 采用如下规则进行舍入处理。

浮点运算

浮点运算

简介当我们用不同的电脑计算圆周率时,会发现一台电脑的计算较另一台来讲结果更加精确。

或者我们在进行枪战游戏的时候,当一粒子弹击中墙壁时,墙上剥落下一块墙皮,同样的场面在一台电脑上的表现可能会非常的呆板、做作;而在另外一台电脑上就会非常生动形象,甚至与我们在现实中看到的所差无几。

这都是浮点运算能力的差异导致的。

定点与浮点大学计算机基础中已经了解过计算机的实数表示方法可分为两种即定点与浮点1、定点数:定点数指小数点在数中的位置是固定不变的,通常有定点整数和定点小数。

在对小数点位置作出选择之后,运算中的所有数均应统一为定点整数或定点小数,在运算中不再考虑小数问题。

(1)定义:数据中小数点位置固定不变的数(2)种类:定点整数(3)小数点在符号位与有效位之间。

注:定点数受字长的限制,超出范围会有溢出。

2、浮点数:浮点数的表示形式有点像科学计数法(*.*****×10^***),它的表示形式是0.*****×10^***,在计算机中的形式为 .***** e ±***),其中前面的星号代表定点小数,也就是整数部分为0的纯小数,后面的指数部分是定点整数。

利用这样的形式就能表示出任意一个整数和小数,例如1024就能表示成0.1024×10^4,也就是 .1024e+004,3.1415926就能表示成0.31415926×10^1,也就是 .31415926e+001,这就是浮点数。

浮点数进行的运算就是浮点运算。

注:其浮点数的精度由尾数决定,数的表示范围由阶码决定。

浮点数,这个复杂点,有三种格式单精度:_31_30________23_22___________0符号指数有效数双精度:_63_62__________52_51__________________0符号指数有效数扩展精度数:_79_78____________64_63___________________0符号指数有效数3、定点数与浮点数区别定点表示法运算直观,但数的表示范围较小,不同的数运算时要考虑比例因子的选取,以防止溢出。

a40 单精度浮点运算

a40 单精度浮点运算

a40 单精度浮点运算
单精度浮点运算是指使用32位来表示浮点数的运算。

在计算机中,单精度浮点数采用IEEE 754标准表示,其中1位用于符号位,8位用于指数,剩下的23位用于尾数。

单精度浮点运算涉及加法、减法、乘法和除法等基本运算。

在单精度浮点运算中,加法和减法可以通过将两个数的尾数对齐,然后根据指数的差异来进行运算。

乘法和除法则需要考虑尾数和指数的运算规则,以及溢出和舍入等问题。

在进行单精度浮点运算时,需要注意舍入误差和精度损失的问题。

由于单精度浮点数只有23位的尾数精度,所以在进行大量运算时可能会出现精度损失的情况,这需要在实际计算中进行适当的处理和优化。

此外,单精度浮点运算还涉及到特殊值的处理,比如正负无穷大、NaN(Not a Number)等情况,需要根据IEEE 754标准进行相应的处理和判断。

总的来说,单精度浮点运算是计算机中非常重要的一部分,需
要对尾数、指数、舍入误差、特殊值等多个方面进行全面考虑,以确保计算结果的准确性和稳定性。

浮点运算

浮点运算

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”。

浮点数的四则运算

浮点数的四则运算
例 已知 [Ex]移=00110,[Ey]移=11011,求[Ex+Ey]移。 解:因为[Ex]移 + [Ey]移 = 00110+11011=00001 将符号位取反得:[Ex+Ey]移=10001
8
由于补码和移码的数值位相同,符号位相反,因 此可以将移码和补码混合使用,即利用X的移码和Y的 补码之和来表示X+Y的移码。
移码加减运算的溢出判断方法是: Sf1 Sf2=00,结果为负,无溢出; Sf1 Sf2=01,结果为正,无溢出; Sf1 Sf2=10,结果上溢; Sf1 Sf2=11,结果下溢;
10
例 设不含阶符的阶码位数n=4,Ex=-1010,Ey=+ 0111,求[Ex±Ey]移。
解: [Ex]移 =000110,[Ey]补 =000111, [-Ey]补 =111001
2
浮点加减运算(续)
右规和对阶操作时尾数右移,需要进行舍入处理。 计算机中的舍入方法: ❖ 截断法:
将移出的数据一律舍去。该方法简单,但影响精度;
❖ 0舍1入法:
移掉的是1,则尾数末位加1,移掉的是0,则不加。
❖ 末位恒置1法:
将欲保留的末位数据恒置1,无论右移掉的是1还是0,也 无论此时末位是1还是0。
[Ex+ Ey ]移=[Ex]移 + [Ey]补 =000110+000111= 001101,Ex+ Ey=-0011;
[Ex- Ey ]移=[Ex]移 + [-Ey]补 =000110+111001= 111111,结果出现下溢出.
11
2.7.2 浮点乘除运算
一、浮点乘法运算 设两个浮点数为:X=Mx·2Ex,Y=My·2Ey 则:X·Y=(Mx·My)·2(Ex+Ey) 浮点乘法运算的步骤: 1.乘数判0,若有一乘数为0 ,则积为0,无需运算; 2.阶码相加并判溢出;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
–当结果尾数两个符号位的值不同时,表明尾数运算结 果溢出。此时应使结果尾数右移一位,并使阶码值加 1——右规。 –当尾数运算结果不溢出,但最高数值位与符号位同值 时,表明不满足规格化规则,此时应重复地使尾数左 移,阶码减1,直到出现在最高数值位上的值与符号位 的值不同为止——左规。
• (4)舍入操作。在执行对阶或右规时,会使 尾数低位上的若干位数值被移掉。
9.1 浮点数表示
• 定点数所表示的数值范围太小,特别是科学 计算方面,其数值范围很大,因此引入浮 点数表示。 • 浮点数是指小数点在数据中的位置可以左 右移动的数据。 E-阶码,用整数表示, 指出小数点的位置,决 • 一个数N的浮点数形式可写成 定了浮点数范围 E N=M*R
M-尾数,小数表示, 决定了浮点数的 精度。
正数
非规格化数原码 非规格化数补码 规格化数原码 规格化数补码 max min max min max min max 0 01111111 11·· ·1 0 11111111 00·· ·01 0 01111111 11·· ·1 0 10000000 00·· ·01 0 01111111 11·· ·1 0 11111111 10·· ·00 0 01111111 11·· ·1
• 本节讨论规格化浮点数运算。 • 虽然叫浮点加法器,它也可以做减法。
9.3.1 浮点加法算法
• 假设有两个浮点数 X=MX*2EX Y=MY*2EY • 实现X±Y运算,要用如下五步完成。 • (1)对阶操作,即比较两个浮点数阶码值的大小, 求△E=EX-EY。
–当△E不等于0时,首先应使两个数取相同的阶码值。
• 单精度浮点数转换成32位整数的方法
– 在24位的1.Ma的右边补8个0,使它变成32位 整数。 – 如果Ea<127+31,还要把这个32位整数右移 127+31-Ea位,空出位补0。 – 如果浮点数为负数,还要把它转换为负数(求 反加1)。
• 如果浮点数超出了-231~(+231-1)的范围,令 d=80000000H,且置标志invalid=1,表示 无效。
负数
1 11111111 00·· ·01 1 01111111 11·· ·1 1 10000000 11·· ·11 1 01111111 00·· ·0 1 11111111 10·· ·00 1 01111111 11·· ·1 1 10000000 01·· ·11
min
0 10000000 10·· ·00
类型
存储位数
数符(s) 阶码(E) 尾数(M) 总位数
阶码偏移值
十六进制
十进制
短实数
(Single Float)
1位
1位 1位
8位
11 位 15位
23位
52位 64位
32位
64位 80位
0x7FH
0x3FFH 0x3FFFH
127
1023 16383
长实数 (Double)
临时实数
(延伸双精确度, 不常用)
第9章
浮点算法及FPU Verilog HDL设计
• 前面设计的CPU中只有整数部件IU,如果 要对小数进行计算,则需要相应的电路支 持。
– 定点部件—只需要假设一个小数点存在于某2 位之间,计算时要把小数点对齐。 – 浮点部件—与定点部件不同,因为浮点数的小 数点不是固定的。
• 浮点数也是用二进制数表示的,但这些二 进制数位有不同的意义。
• 为了能够检测出精度是否损失,在移位过 程中使用了56位数据格式,其中32位是结 果,右边24位是被移出的位。若这24不是 全0,则表示精度丢失。 • 程序代码见f2i.v。
9.2.2 整数转换成浮点数
• 所有的整数转换成浮点数,不会出现“无效操作” 的情况。 • 由于浮点数的尾数只有24位(含隐藏位),因此32 位整数转换成浮点数时会出现精度损失的情况。 • 下面给出转换的算法。
• 4、X=0的移码与[X]移=0 根据移码的定义,有 [+0]移=2n+0000...0=1000…0 [-0]移=2n+0000...0=1000…0 • 在移码表示中,“0‖的表示形式是唯一 的。 [X]移=0时,则 2n+X=0,X=-2n 即[X]移为0时,表示了X的最小真值。
• 浮点数的范围--以短浮点数为例(R=2) • 1、二进制数范围—包括0
• 例如(R=2): 尾数运算结果为 00.01001,数左移一位 (左规)后尾数变为00.1001,阶码减1。 • 例如: 尾数运算结果为 01.10010,数右移一位 (右规)后尾数变为00.11001,阶码加1。
• 浮点数的阶码可采用移码和补码表示。 • 下面分析一下移码的性质及其优点。 • 如果阶码有n+1位(包括符号位),其阶码X 的移码定义为: [X]移=2n+X -2n≤X≤2n-1 • 设n=7,则 [X]移=128+X -128≤X≤127(mod 2n+1) • [X]移实质上是X的余128码。
R-基数,不需要表示出 来,R∈{2,4,8, …}
• 在计算机中,浮点数格式:
M0
1位
E
k位
M
n位
• 选择k和n的值既要保证有足够大的数值范围, 又保证有所要求的数值精度。
IEEE754 浮点数表示的标准
• 该标准规定R=2,阶码E用移码表示,尾数M用原码 表示。 • 根据二进制的规格化方法,最高数字位总是1,该 标准将这个1缺省存储(隐藏),使得尾数表示范围 比实际存储的多一位。 • IEEE754标准的浮点数格式为:
9.2.1 浮点数转换成整数
• 由于浮点数所有表示的数的范围比32位整数大得 多,所以许多浮点数不能被转换成整数。 • 例如(R=2):
– 浮点数a=4effffffH=0_100 1110 1_111 1111 1111 1111 1111 1111b,则 – M0=0 – Ea=10011101b=127+30,由于要变成整数,所以 Ea=0。即Ea每一次-1,尾数要左移1位,共移30位。 – 1.Ma=1. 111 1111 1111 1111 1111 1111,左移30位 后得: – d= 0111 1111 1111 1111 1111 1111 1000 0000(?)
• 一个浮点数的表示形式不是唯一的。 • 例如: 电子质量=0.9*10-27=0.09*10-26 =.... • 为了使浮点数有一个统一的标准形式, 规定浮点数必须采用规格化形式。浮点 数规格化对尾数M提出了限制要求: 1/R≤|M|<1(具体到等号有所不同)
• 对于R=2,表示形式
M 正数 原码 0.1XXXX 补码 0.1XXXX 负数 1.1XXXX 1.0XXXX ?
2-23*2-127
-2-23*2-127
-(1-2-23)*2127
max
min max min max min
(1-2-23)*2127
2-23*2-128 (1-2-23)*2127 1/2*2-127 (1-2-23)*2127 2-1*2-128
-2-23*2-128
-1*2127 -1/2*2-127 -(1-2-23)*2127 -(2-1-2-23)*2-128 -1*2127
移码 11111111 11111110 10000000 10000000 01111111 00000001 00000000
-1111111 11111111 -10000000 不能表示
• 优点:比较大小移码非常方便。 • 移码表示法性质:

移码符号与原码、补码符号相反 移码与补码的关系 一个数的移码等于该数补码反符号。 [X]移=Xn.Xn-1Xn-2·· 0 ·X [X]补=~Xn.Xn-1Xn-2··0 ·X
• 机器零、上溢、下溢概念。
上溢 出错 下溢 机器0 上溢 出错
-min
-max 0
min
max
9.2 单精度浮点数与整数之间的转换
• 浮点数与整数之间的转换是在编程序时经 常用到的操作。 • 在此讨论单精度浮点数与用32位补码表示 的整数之间的转换算法并给出Verilog HDL 源代码。 • 这里浮点数采用IEEE 754标准。
1 01111111 00·· ·0
注: • 11·1或00·0 共有23个1或0。 · · · · • 00·01 或 10·00 或 01·11 共有22个0或1。 · · · · · ·
• 2、十进制数形式
正数 负数
非规格化数原码 非规格化数补码 规格化数原码 规格化数补码
max
min
(1-2-23)*2127
• 由于浮点数能表示小数,如a=0.5,而整数 不能表示,因此还给出了标志位 precision_lost,表示精度已经损失。
– 如a=3fc00000H=0_011 1111 1_100 0000 0000 0000 0000 0000b – M0=0,Ea=127,1.Ma=1100 0000 0000 0000 0000 0000 0000 0000。 – 由于127+31-Ea=31,故右移32位得: – d=0000 0000 0000 0000 0000 0000 0000 0001.1b – 小数点右边的数将被丢掉,造成精度损失。
–舍入的原则是要有舍有入,而且尽量使舍和入 的机会均等,以防止误差积累。
• 程序见 i2f.v
9.3 浮点加法器FADD设计
• 浮点数由阶码(定点整数)和尾数(定点小 数)两部分组成。因此浮点运算器由阶码 运算部件和尾数运算部件两部分组成。 • 浮点数运算又可分为
– 规格化浮点运算,它是指参与运算的数和运 算结果为规格化的浮点数。 – 非规格化浮点数运算,无任何要求。
相关文档
最新文档