主题:求代码!实现纯小数如何转换成二进制小数?
jiujieqiao
[专家分:0] 发布于 2006-10-18 22:29:00
如何实现纯小数如何转换成二进制小数?(要求精确到0.00000000001)
(本题是难在:精确时如果要进1,那怎么办啊)
回复列表 (共3个回复)
沙发
rickone [专家分:15390] 发布于 2006-10-19 17:17:00
IEEE754说‘纯小数’就是二进制小数,你只需要求出阶码对阶即可。精确度的问题可以用0舍1入法,进1就是加1。
板凳
euc [专家分:4310] 发布于 2006-10-20 12:44:00
例如0.33转化成2进制小数就是
0.33*2=0.66 < 1, 第1位是0;
0.66*2=1.32 >= 1, 第2位是1, 去掉整数部分继续;
0.32*2=0.64 < 1, 0;
0.64*2=1.28 >= 1, 1;
0.28*2=0.56 < 1, 0;
0.56*2=1.12 > 1, 1;
0.12*2=0.24 < 1, 0;
....(好象没完了)
所以结果是: 0.0101010...
这说明有限的十进制小数转化成其他进制不一定有限.
3 楼
pentiumchen [专家分:70] 发布于 2006-10-22 00:20:00
#include<stdio.h>
#define MaxSize 100
void f(float n)
{
int a[MaxSize];
int i=(int)n,j;
int k=0;
float d=n-i;
while(i!=0)
{
a[k++]=i%2;
i/=2;
}
for(j=k-1;j>=0;j--)
printf("%d",a[j]);
if(d!=0)
{
printf(".");
while(d>1e-10)
{
d=d*2.0;
if(d>=1)
{
printf("1");
d=d-1;
}
else
printf("0");
}
}
}
void main()
{
float n;
scanf("%f",&n);
f(n);
}
不知道这个对不对
我来回复