紫书习题3-12 浮点数(Floating-Point Numbers, UVa11809)
题目:计算机常用阶码-尾数的方法保存浮点数。如 图3-9所示,如果阶码有6位,尾数有8位,可以表 达的最大浮点数为0.1111111112×21111112。注意小 数点后第一位必须为1,所以一共有9位小数。
这个数换算成十进制之后就是 0.998046875263=9.2053576383452941018。你的 任务是根据这个最大浮点数,求出阶码的位数E 和尾数的位数M。输入格式为AeB,表示最大浮 点数为A*10B。0<A<10,并且恰好包含15位有效 数字。输入结束标志为0e0。对于每组数据,输 出M和E。输入保证有唯一解,且0≤M≤9, 1≤E≤30。在本题中,M+E+2不必为8的整数倍。
对于M有要求,就是1/2 ≤ M < 1,所以用二进制表示M的话就应该是0.1XX……,用计算机表示的时候就把最前面的“0.1”这个永远不变的部分给省略掉,只表示可能变化的部分。阶码部分则是只用二进制表示E。
#include<bits/stdc++.h>
using namespace std;
int