🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 定点数 小数点固定在某个位置的数称之为定点数 - 纯小数:`[符号位][数值位]`,小数点在符号与数值位之间 - 纯整数:`[符号位][数值位]`,小数点在数值位后面 如果要标识一个有整数的小数,需要乘以比例因子 ## 浮点数 相对于浮点数的好处 1. 计算机处理的很大程度上不是纯小数或纯整数 2. 数据范围很大,定点数难以表达 ### 浮点数的表示格式 类似科学表示法: `$ N=S\times r^{j} $` S:尾数 r:基数 j:阶码 表示:`[阶码符号位][阶码数值位][尾数符号位][尾数数值位]` > 尾数规定使用纯小数,为8位,不够则补齐 示例: ``` 11.0101 = 0.110101×2^10 = 0.0110101×2^11 [阶码符号位][阶码数值位][尾数符号位][尾数数值位(8位)] 0 10 0 110101[00] 八位补齐 00 0 11 0 0110101[0] 八位补齐 0 ``` ### 浮点数的表示范围 假设阶码数值取m位,尾数数值取n位 `$ N=S\times r^{j} $` `[阶码符号位][阶码数值位][尾数符号位][尾数数值位]` ### 阶码最值 值全是1,能够表示的最大值:`$ 2^{m}-1 $` 最大值取负表示最小值,表示范围:`$ [-(2^{m}-1),2^{m}-1] $` ### 尾数最值 尾数全是1时,为最大值: `$ 1-2^{-n} $` 尾数除最后一位1,其余为0,最小值:`$ 2^{-n} $` 尾数标识范围:`$ [2^{-n},1-2^{-n}] $` 如果考虑符号位 `$ [-(1-2^{-n}),-(2^{-n})] [2^{-n},1-2^{-n}] $` ![](https://img.kancloud.cn/a9/f5/a9f5b9cf55be928fc15135c84df3c2e3_2424x1050.png) 最小值:尾数的最小*阶码的最大 最大值:最小的值取反 单精度浮点数:使用4字节、32位来表达浮点数( float ) 双精度浮点数:使用8字节、64位来表达浮点数( double ) ### 浮点数的规格化 `$ 11.0101=0.110101\times 2^{10} $` 小数位必须是小于1(纯小数) ![](https://img.kancloud.cn/57/8e/578efda32349a4daa785c38efb0bb622_2272x1064.png) ## 定点数与浮点数的对比 - 当定点数与浮点数位数相同时,浮点数表示的范围更大 - 当浮点数尾数为规格化数时,浮点数的精度更高 - 浮点数运算包含阶码和尾数,浮点数的运算更为复杂 - 浮点数在数的表示范围、精度、溢出处理、编程等方面均优于定点数 - 浮点数在数的运算规则、运算速度、硬件成本方面不如定点数 > 低成本的CPU会使用定点数 ## 溢出判断 - 定点运算双符号位不一致为溢出 - 浮点运算尾数双符号位不一致不算溢出(因为尾数双符号位可以进行右规) - 浮点运算主要通过阶码的双符号位判断是否溢出(如果规格化后,阶码双符号位不一致,则认为是溢出)