1#include <ansidecl.h> 2 3#ifdef __IEEE_BIG_ENDIAN 4 5typedef union 6{ 7 double value; 8 struct 9 { 10 unsigned int sign : 1; 11 unsigned int exponent: 11; 12 unsigned int fraction0:4; 13 unsigned int fraction1:16; 14 unsigned int fraction2:16; 15 unsigned int fraction3:16; 16 17 } number; 18 struct 19 { 20 unsigned int sign : 1; 21 unsigned int exponent: 11; 22 unsigned int quiet:1; 23 unsigned int function0:3; 24 unsigned int function1:16; 25 unsigned int function2:16; 26 unsigned int function3:16; 27 } nan; 28 struct 29 { 30 unsigned long msw; 31 unsigned long lsw; 32 } parts; 33 long aslong[2]; 34} __ieee_double_shape_type; 35 36#endif 37 38#ifdef __IEEE_LITTLE_ENDIAN 39 40typedef union 41{ 42 double value; 43 struct 44 { 45#ifdef __SMALL_BITFIELDS 46 unsigned int fraction3:16; 47 unsigned int fraction2:16; 48 unsigned int fraction1:16; 49 unsigned int fraction0: 4; 50#else 51 unsigned int fraction1:32; 52 unsigned int fraction0:20; 53#endif 54 unsigned int exponent :11; 55 unsigned int sign : 1; 56 } number; 57 struct 58 { 59#ifdef __SMALL_BITFIELDS 60 unsigned int function3:16; 61 unsigned int function2:16; 62 unsigned int function1:16; 63 unsigned int function0:3; 64#else 65 unsigned int function1:32; 66 unsigned int function0:19; 67#endif 68 unsigned int quiet:1; 69 unsigned int exponent: 11; 70 unsigned int sign : 1; 71 } nan; 72 struct 73 { 74 unsigned long lsw; 75 unsigned long msw; 76 } parts; 77 78 long aslong[2]; 79 80} __ieee_double_shape_type; 81 82#endif 83 84#ifdef __IEEE_BIG_ENDIAN 85typedef union 86{ 87 float value; 88 struct 89 { 90 unsigned int sign : 1; 91 unsigned int exponent: 8; 92 unsigned int fraction0: 7; 93 unsigned int fraction1: 16; 94 } number; 95 struct 96 { 97 unsigned int sign:1; 98 unsigned int exponent:8; 99 unsigned int quiet:1; 100 unsigned int function0:6; 101 unsigned int function1:16; 102 } nan; 103 long p1; 104 105} __ieee_float_shape_type; 106#endif 107 108#ifdef __IEEE_LITTLE_ENDIAN 109typedef union 110{ 111 float value; 112 struct 113 { 114 unsigned int fraction0: 7; 115 unsigned int fraction1: 16; 116 unsigned int exponent: 8; 117 unsigned int sign : 1; 118 } number; 119 struct 120 { 121 unsigned int function1:16; 122 unsigned int function0:6; 123 unsigned int quiet:1; 124 unsigned int exponent:8; 125 unsigned int sign:1; 126 } nan; 127 long p1; 128 129} __ieee_float_shape_type; 130#endif 131 132#if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN) 133 134double 135copysign (double x, double y) 136{ 137 __ieee_double_shape_type a,b; 138 b.value = y; 139 a.value = x; 140 a.number.sign =b.number.sign; 141 return a.value; 142} 143 144#else 145 146double 147copysign (double x, double y) 148{ 149 if ((x < 0 && y > 0) || (x > 0 && y < 0)) 150 return -x; 151 return x; 152} 153 154#endif 155