浮点数和定点数的关系理解

浮点数和定点数的关系理解

一直以来,程序中接触的数据类型都是int整型,char字符型,float单精度浮点型,double双精度浮点型。看到浮点和定点一直不知道如何划分这个概念的范畴。以为浮点就是float表示小数,定点就是int可表示整数而已。经过学习明白了显然是错误的。应该是这样划分的:

  • 浮点:小数点非固定的数,可表示数据范围较广,整数,小数都可表示。包含float,double;
  • 定点:小数点固定,可表示整数,小数。int(整数)本质是小数点位于末尾的32位定点数而已

1. 什么是单精度和双精度?

  • 单精度:单精度数是指计算机表达实数近似du值的一种方式。VB中zhiSingle(单精度浮点型)变量存储为 IEEE 32 位(4 个字节),浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38 。

  • 双精度:双精度浮点数(double)是计算机使用的一种数据类型,使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大约是:4.9x10-324 ~ 1.7x10308。IEEE754为其定制标准。

2. 浮点数的表示法

浮点数以float为例讨论。
IEEE 754标准:
规定浮点数格式为: V = ( − 1 ) s ∗ M ∗ 2 E V = (-1)^s * M * 2^E V=(1)sM2E

  • s表示符号位,当s=0,V为正数;当s=1,V为负数;
  • M表示尾数,2>M>=1;
  • E表示阶码。

32位的浮点数中,S是浮点数的符号位,占1位,安排在最高位,S=0表示正数,S=1表示负数。M是尾数,放在低位部分,占用23位,小数点位置放在尾数域最左(最高)有效位的右边。E是阶码,占用8位。
64位的浮点数中符号位1位,阶码域11位,尾数域52位

将其封装到32位的字中:

符号位 阶码 尾数
1 8 23

根据32位数计算为十进制: V = ( − 1 ) s ∗ ( 1. M ) ∗ 2 E − 127 V = (-1)^s *(1.M) * 2^{E-127} V=(1)s(1.M)2E127
可以得出以下结论:

  • 浮点数表示比整型那些更为复杂。如int中0…01000表示8,0…01001表示9,而浮点不能这样简单。
  • 浮点数不能移位。因为各个位有特殊含义。像int数乘2可以左移1位实现。

参考文献

  • 浮点数和定点数的相互转换(浮点数量化为定点)
  1. 浮点数和定点数的转换是一种映射。将较为密集的数据空间(F32)映射到较为稀疏的空间(int8);
  2. 定点数的小数点实际中是没有的,这只是我们逻辑上的一种设定。01序列是一样的,CPU读取都是相同的,因为我们逻辑上小数点的不同位置,我们认为它代表的值是不同的;
  • 浮点数的表示方法

你可能感兴趣的:(计算机)