| #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 |

| |

| |

| double DEFUN(copysign, (x, y), double x AND double y) |

| { |

| __ieee_double_shape_type a,b; |

| b.value = y; |

| a.value = x; |

| a.number.sign =b.number.sign; |

| return a.value; |

| } |