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/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章