doble float小程序

http://blog.csdn.net/Tunix126/archive/2006/10/17/1338464.aspx

 

这里有个网站,可以帮助理解,也可以验证过自己写的程序是否正确,

#include <stdio.h>

typedef unsigned
long    u32;

typedef
struct x_double_type_t     x_double_type;
struct x_double_type_t
{
    u32 low_32;
    u32 hi_32 ;
};

#define double     x_double_type

void f2d( float f , double *x )
{
    u32 a , b;
    u32 uf
= *(u32*)&f;
    u32
*ux = (u32*)x;
   
    ux[
0] = ux[1] = 0;
    ux[
1] |= uf&0x80000000;
   
    a
= (uf&0x7f800000)>>23;
    b
= uf&0x7fffff;
    a
+= 1024 - 128;
    ux[
1] |= a<<20;
    ux[
1] |= b>>3 ;
    ux[
0] |= b<<29;   
}

int main()
{   
   
float  f = 3.14159265f;
   
double x;
   
    f2d( f ,
&x );   
    printf(
"%lf/n" , x );
   
   
while( 1 == scanf( "%f" , &f ) )
    {
        f2d( f ,
&x );
        printf(
"%lg/n" , x );
    }

return 0;   
}

 

 

初学时候对格式的理解存在一个误区,这个误区实际上来自网络,今天终于好好理解了一番。http://www.ebookee.net/IEEE-float-dl/

 

你可能感兴趣的:(struct,网络,float)