#include <ansidecl.h>#ifdef __IEEE_BIG_ENDIANtypedef union{double value;struct{unsigned int sign : 1;unsigned int exponent: 11;unsigned int fraction0:4;unsigned int fraction1:16;unsigned int fraction2:16;unsigned int fraction3:16;} number;struct{unsigned int sign : 1;unsigned int exponent: 11;unsigned int quiet:1;unsigned int function0:3;unsigned int function1:16;unsigned int function2:16;unsigned int function3:16;} nan;struct{unsigned long msw;unsigned long lsw;} parts;long aslong[2];} __ieee_double_shape_type;#endif#ifdef __IEEE_LITTLE_ENDIANtypedef union{double value;struct{#ifdef __SMALL_BITFIELDSunsigned int fraction3:16;unsigned int fraction2:16;unsigned int fraction1:16;unsigned int fraction0: 4;#elseunsigned int fraction1:32;unsigned int fraction0:20;#endifunsigned int exponent :11;unsigned int sign : 1;} number;struct{#ifdef __SMALL_BITFIELDSunsigned int function3:16;unsigned int function2:16;unsigned int function1:16;unsigned int function0:3;#elseunsigned int function1:32;unsigned int function0:19;#endifunsigned int quiet:1;unsigned int exponent: 11;unsigned int sign : 1;} nan;struct{unsigned long lsw;unsigned long msw;} parts;long aslong[2];} __ieee_double_shape_type;#endif#ifdef __IEEE_BIG_ENDIANtypedef union{float value;struct{unsigned int sign : 1;unsigned int exponent: 8;unsigned int fraction0: 7;unsigned int fraction1: 16;} number;struct{unsigned int sign:1;unsigned int exponent:8;unsigned int quiet:1;unsigned int function0:6;unsigned int function1:16;} nan;long p1;} __ieee_float_shape_type;#endif#ifdef __IEEE_LITTLE_ENDIANtypedef union{float value;struct{unsigned int fraction0: 7;unsigned int fraction1: 16;unsigned int exponent: 8;unsigned int sign : 1;} number;struct{unsigned int function1:16;unsigned int function0:6;unsigned int quiet:1;unsigned int exponent:8;unsigned int sign:1;} nan;long p1;} __ieee_float_shape_type;#endif#if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN)doublecopysign (double x, double y){__ieee_double_shape_type a,b;b.value = y;a.value = x;a.number.sign =b.number.sign;return a.value;}#elsedoublecopysign (double x, double y){if ((x < 0 && y > 0) || (x > 0 && y < 0))return -x;return x;}#endif