问题的提出
我的计组课设 - “浮点数的表示和计算”需要假设没有浮点表示和计算的硬件,用软件方法采用仿真方式实现IEEE 754单精度浮点数的表示及运算功能,其中关于二进制转十进制小数的部分比较困难, 查询资料也无果,于是我提出了这个算法,它的特点在于:
- 不使用浮点指令
- 算法中的所有变量都只能存储于32位的寄存器中
- 每读取一位小数,就将这位小数的信息表达到结果中,避免内存消耗
算法思路
这个算法基于上面特点中的第三条,即:每读取一位小数,就将这位小数的信息表达到结果中,结果寄存器一直表示在当前已知的部分小数位的情景下,对二进制小数的最大值的最大似然估计
- 当没读取小数时,结果寄存器为0 (即估计值为 2 32 2^{32} 232)
- 当读取了第一位小数(十分位),比如7,则坍缩一部分可能性,结果寄存器减去 2 32 10 × ( 9 − 7 ) \frac{2^{32}}{10} \times (9-7) 10232