#include #if defined(sparc) || defined(stellar) || defined(applec) || defined(THINK_C) || defined(hpux) || defined(IBMRS6000) #define BIGENDIAN 1 #endif /* sun || sparc || stellar || applec || THINK_C */ /* * Allow for both big-endian (sgi) and little-endian (dec) * mips machines. */ #if defined(MIPSEL) || defined(_MIPSEL) || defined(__MIPSEL) #define BIGENDIAN 0 #endif #if defined(MIPSEB) || defined(_MIPSEB) || defined(__MIPSEB) #define BIGENDIAN 1 #endif /* DEC Alpha machines. */ #if defined(__alpha) #define BIGENDIAN 0 #endif /* Various Intel chips. */ #if defined(m386) || defined(M_I86) || defined(MSDOS) || defined(I860) || defined(PVS) || defined (_M_IX86) || defined(__i386__) #define BIGENDIAN 0 #endif /* m386 || M_I86 */ #ifdef vax #define BIGENDIAN 0 #endif /* vax */ #if (BIGENDIAN == 1) typedef struct ieeedouble { unsigned int sign:1; unsigned int exp:11; unsigned int mant:20; unsigned int mant2:32; } ieeedouble; typedef struct ieeefloat { unsigned int sign:1; unsigned int exp:8; unsigned int mant:23; } ieeefloat; #else /* BIGENDIAN 0 or little endian */ typedef struct ieeedouble { unsigned int mant2:32; unsigned int mant:20; unsigned int exp:11; unsigned int sign:1; } ieeedouble; typedef struct ieeefloat { unsigned int mant:23; unsigned int exp:8; unsigned int sign:1; } ieeefloat; #endif /* BIGENDIAN */ typedef struct ieeedouble nativedouble; typedef struct ieeefloat nativefloat; typedef union { ieeedouble ieee; nativedouble native; char b[8]; double d; } double_type; typedef union { ieeefloat ieee; nativefloat native; char b[4]; float f; } float_type; #define ISFRACTION(e) (1022 - 4 <= (e) && (e) <= 1022 + 15) #define EXTRACTFRACTION(dp) \ (((unsigned)(1L<<30)|((unsigned)(dp)->native.mant<<10)| \ ((dp)->native.mant2>>22)) >> (1022+15-(dp)->native.exp)) #define EXTRACTEXPONENT(dp) ((dp)->native.exp) void main( void ) { int i,j; static float nf[]={ 0.0, -10.34, 9.99e9, 1.1e-5 }; static double nd[]={ 0.0, -10.34, 9.99e9, 1.1e-5 }; FILE *f; register int exp; register long n, an; int fractbytes; double_type d[4]; #if (BIGENDIAN == 1) fprintf(stderr,"host is bigendian\n"); #else fprintf(stderr,"host is littleendian\n"); #endif for(i=0;i<4;i++) { fprintf(stderr, "d: %f\n", d[i].d); fwrite( d[i].b, sizeof(double), 1, stdout); } #if (BIGENDIAN == 1) fprintf(stderr,"host sun4, open i86pc\n"); f=fopen("i86pc","r"); #else fprintf(stderr,"host i86pc, open sun4\n"); f=fopen("sun4","r"); #endif for(i=0;i<4;i++) { for( j=0; j