回 帖 发 新 帖 刷新版面

主题:求代码!实现纯小数如何转换成二进制小数?

如何实现纯小数如何转换成二进制小数?(要求精确到0.00000000001)
(本题是难在:精确时如果要进1,那怎么办啊)

回复列表 (共3个回复)

沙发

IEEE754说‘纯小数’就是二进制小数,你只需要求出阶码对阶即可。精确度的问题可以用0舍1入法,进1就是加1。

板凳

例如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 楼

#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);
}
不知道这个对不对

我来回复

您尚未登录,请登录后再回复。点此登录或注册