#include #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; }