FPU:(Float Point Unit,浮点运算单元)FPU是专用于浮点运算的处理器,以前的FPU是一种单独芯片,在486之后,英特尔把FPU集成在CPU之内。
浮点运算器(英文:floating point unit,简称FPU)是计算机系统的一部分,它是专门用来进行浮点数运算的。典型的运算有加减乘除和开方。一些系统(尤其是比较老的,基于 微代码体系的)还可以计算超越函数,例如指数函数或者三角函数,尽管对大多数现在的处理器,这些功能都由软件的函数库完成。
在大多数现在的 通用计算机架构中,一个或多个 浮点运算器会被集成在CPU(Central Processing Unit, 中央处理器)中,但许多 嵌入式处理器(特别是比较老的)没有在硬件上支持浮点数运算。
在过去,一些系统通过协同处理器而不在同一个处理器中来处理浮点数。在 微型计算机时代,这一般只用一个芯片;而在以前,可能要用一整个电路板甚至一台机箱。
不是所有的计算机架构中都有硬件的 浮点运算器。在没有硬件 浮点运算器的情况下,许多浮点数的运算也可以像有硬件那样做到。这样可以节省 浮点运算器的硬件成本,但这样会使计算变得慢得多。仿硬件 浮点运算可以通过多种层次的方法实现——在CPU中用 微代码处理,用操作系统的函数处理,用用户自己的代码处理。
在大多数现代计算机的架构中,一些浮点数运算跟整数运算是分开的。这些分别在不同的架构上差别很大。有一些架构,例如 英特尔(Intel)的x86处理器设计了浮点数 寄存器,另一些架构中,处理浮点数甚至有独立的时频时域。
当CPU执行一个需要浮点数运算的程序时,有三种方式可以执行:软件仿真器( 浮点运算函数库)、附加 浮点运算器和集成浮点运算器。多数现在的计算机有集成的 浮点运算器硬件。
浮点数运算常常是用特别的总线传输的。在早期的没有 中断机制
的大尺度架构(的处理器)中, 浮点运算
有时与整数运算独立传输。今时今日,许多CPU或架构都有超过一个 浮点运算器
,例如PowerPC 970 和基于Netburst和AMD64架构的处理器(分别例如奔腾(Pentium)4和 速龙
(Athlon)64)
浮点运算就是实数运算,因为计算机只能存储整数,所以实数都是约数,这样浮点运算是很慢的而且会有误差。现在大多数机器都是32位的,也就是说32位都用来表示整数的话,那么对于无符号整数就是0 到 2^32-1,对于有符号的话就是-2^31 到 2^31-1。
当我们用不同的电脑计算 圆周率时,会发现一台电脑的计算较另一台来讲结果更加精确。或者我们在进行枪战游戏的时候,当一粒子弹击中墙壁时,墙上剥落下一块墙皮,同样的场面在一台电脑上的表现可能会非常的呆板、做作;而在另外一台电脑上就会非常生动形象,甚至与我们在现实中看到的所差无几。这都是 浮点运算能力的差异导致的。
如果是实数的话,就不是这样了,机器有两种办法表示实数,一种是定点,就是小数点位置是固定的,一种是 浮点,就是小数点位置不固定,计算方法也比较麻烦,通常会比整数运算代价大很多
FPU->Floating Point Unit, 浮点运算部件
BCD->Binary Coded Decimal 压缩的二进制数,是用4个位来表示数字0~9,一个byte表示两个十进制数,比如01111001表示79
科学计数法:a×10的n次幂的形式。将一个数字表示成 (a×10的n次幂的形式),其中1≤|a|<10,n表示整数,这种记数方法叫 科学记数法
浮点运算使用三种不同的数据:
1)整数(Integer),又分为字,短整数(Short Integer)和长整数(Long Integer)
2)实数(Real)分单精度(Single Real)和双精度(Double Real)
3)压缩的 二十进制数(BCD)
下面是其位数(bits)和能表示的大致范围和
Type Length Range
-----------------------------------------------
Word Integer 16 bit -32768 to 32768
Short Integer 32 bit -2.14e9 to 2.14e9
Long Integer 64 bit -9.22e18 to 9.22e18
Single Real 32 bit 1.18e-38 to 3.40e38
Double Real 64 bit 2.23e-308 to 1.79e308
extended Real 80 bit 3.37e-4932 to 1.18e4932
Packed BCD 80 bit -1e18 to 1e18
双精度数和扩展精度数表示范围对一般应用来说已经足够大了!
1)整数,以补码形式 存储,正数的补码是其本身,负数补码是其绝对值的各位变反后加1,下面是实际存储的例子:
0024 var1 dw 24
FFFE var2 dw -2
000004D2 var3 dd 1234
FFFFFF85 var4 dd -123
0000000000002694var5 dq 9876
2)BCD数
在FPU中用80位表示正好是 浮点堆 寄存器的宽度,在其格式如下存储:
Bit
79___72_71________________________________________0
符号 ---18个 二十进制数——————————---
看下面的例子:
00000000000000012345 var1 dt 12345
80000000000000000100 var2 dt -100
3) 浮点数,这个复杂点,有三种格式
单精度:_31_30________23_22___________0
符号 指数 有效数
双精度:_63_62__________52_51__________________0
符号 指数 有效数
扩展精度数:
_79_78____________64_63___________________0
符号 指数 有效数
FPU->Floating Point Unit,浮点运算部件
BCD->Binary Coded Decimal 压缩的 二十进制数,是用4个位来表示数字0~9,一个byte表示两个十进制数,比如01111001表示89
浮点运算使用三种不同的数据:
1、整数(Integer),又分为字,短整数(Short Integer)和长整数(Long Integer)
2、实数(Real)分单精度(Single Real)和双精度(Double Real)
3、压缩的二十进制数(BCD)