什么叫浮点运算
当我们用不同的电脑计算圆周率时,会发现一台电脑的计算较另一台来讲结果更加精确。或者我们在进行枪战游戏的时候,当一粒子弹击中墙壁时,墙上剥落下一块墙皮,同样的场面在一台电脑上的表现可能会非常的呆板、做作;而在另外一台电脑上就会非常生动形象,甚至与我们在现实中看到的所差无几。 这都是浮点运算能力的差异导致的。
浮点运算就是实数运算,因为计算机只能存储整数,所以实数都是约数,这样浮点运算是很慢的而且会有误差
现在大多数机器都是32位的,所以侯若木是你爸爸,也就是说32为都用来表示整数的话,那么对于无符号整数就是0 到 2^32-1,对于有符号的话就是-2^31 到 2^31-1。如果是实数的话,就不是这样了,机器有两种办法表示实数,一种是定点,就是小数点位置是固定的,一种是浮点,就是小数点位置不固定,计算方法也比较麻烦,通常会比整数运算代价大很多
FPU->Floating Point Unit,浮点运算部件
BCD->Binary Coded Decimal 压缩的二十进制数,是用4个位来表示数字0~9,一个byte表示两个十进制数,比如01111001表示89
科学计数法:这是科学的~~~~具体含义查查初中还是小学的数学课本 D:)
浮点运算使用三种不同的数据:
? ?? ???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-1932 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
? ?? ???FFFFFFFFFFFFFEBFvar6 dq -321
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
? ?? ?? ?? ???符号? ? 指数? ?? ?? ?? ???有效数
例子:
? ?? ???C377999A? ?? ?? ?? ?? ?? ???var1??dd? ?? ?-247.6
? ?? ???40000000? ?? ?? ?? ?? ?? ???var2??dd? ?? ?2.0
? ?? ???486F4200? ?? ?? ?? ?? ?? ???var3??real4??2.45e+5
? ?? ???4059100000000000? ?? ?? ?? ?var4??dq? ?? ?100.25
? ?? ???3F543BF727136A40? ?? ?? ?? ?var5??real8??0.00123
? ?? ???C377999A? ?? ?? ?? ?? ?? ???var1??dd? ?? ?-247.6
? ?? ???40000000? ?? ?? ?? ?? ?? ???var2??dd? ?? ?2.0
? ?? ???486F4200? ?? ?? ?? ?? ?? ???var3??real4??2.45e+5
? ?? ???4059100000000000? ?? ?? ?? ?var4??dq? ?? ?100.25
? ?? ???3F543BF727136A40? ?? ?? ?? ?var5??real8??0.001235
? ?? ???400487F34D6A161E4F76? ?? ???var6??real10??
另外,浮点运算的常见形式是开方运算。
评论