|  | #include <ansidecl.h> | 
|  |  | 
|  | #ifdef __IEEE_BIG_ENDIAN | 
|  |  | 
|  | typedef 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_ENDIAN | 
|  |  | 
|  | typedef union | 
|  | { | 
|  | double value; | 
|  | struct | 
|  | { | 
|  | #ifdef __SMALL_BITFIELDS | 
|  | unsigned int fraction3:16; | 
|  | unsigned int fraction2:16; | 
|  | unsigned int fraction1:16; | 
|  | unsigned int fraction0: 4; | 
|  | #else | 
|  | unsigned int fraction1:32; | 
|  | unsigned int fraction0:20; | 
|  | #endif | 
|  | unsigned int exponent :11; | 
|  | unsigned int sign     : 1; | 
|  | } number; | 
|  | struct | 
|  | { | 
|  | #ifdef __SMALL_BITFIELDS | 
|  | unsigned int function3:16; | 
|  | unsigned int function2:16; | 
|  | unsigned int function1:16; | 
|  | unsigned int function0:3; | 
|  | #else | 
|  | unsigned int function1:32; | 
|  | unsigned int function0:19; | 
|  | #endif | 
|  | unsigned 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_ENDIAN | 
|  | typedef 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_ENDIAN | 
|  | typedef 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) | 
|  |  | 
|  | double | 
|  | copysign (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; | 
|  | } | 
|  |  | 
|  | #else | 
|  |  | 
|  | double | 
|  | copysign (double x, double y) | 
|  | { | 
|  | if ((x < 0 && y > 0) || (x > 0 && y < 0)) | 
|  | return -x; | 
|  | return x; | 
|  | } | 
|  |  | 
|  | #endif |