首先,计算机的小数并不都叫浮点数。
只是现代桌面处理器大都集成有 FPU (浮点处理器),我们在写程序时,用到小数的地方,用 float 类型表示,可以方便快速地对小数进行运算。
计算机中小数的表示法,其实有定点和浮点两种。
定点表示法因其难以避免的局限性 (表示范围和精度是一对矛盾体),已经被当代桌面处理器(如x86)摒弃不用。但我想只要你愿意,依然可以在你台式机的编译器中用定点开心的玩着小数。
但是,并不是所有的处理器都像 X86 这么豪,在某些恶劣、简陋的嵌入式环境中,哪有 FPU 给你用,小数还是不得不用定点的方式,例如某些 DSP。因为定点运算相对浮点较为简单。
科普到底,以 32 bit 机器为例,说下什么是定点数和浮点数。
好吧,还是尽量说的通俗简单点。
定点数
定点的意思是,小数点固定在 32 位中的某个位置,前面的是整数,后面的是小数。
小数点具体固定在哪里,可以自己在程序中指定。
例如上面的例子,小数点在 23 bit 处。
无论你是124.25,是0.5, 还是100, 小数点都在 23 bit 的位置固定不变。
浮点数
浮点数的存储格式,一般按照标准 IEEE 754。
IEEE 754 规定,浮点数的表示方法为:
最高的 1 位是符号位 s,接着的 8 位是指数E,剩下的 23 位为有效数字 M。
例如:
5 DEC = 101 BIN = 1.01 x 2^2
9 DEC = 1001 BIN = 1.001 x 2^3
100 DEC = 01100100 BIN = 1.100100 x 2^6
0.125 DEC = 0.001 BIN = 1 x 2^-3
这一下,小数点的位置就是迷之存在,漂浮不定了。
浮点,想必故此得名吧。