1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include "libm.h" double copysign(double x, double y) { union {double f; uint64_t i;} ux={x}, uy={y}; ux.i &= -1ULL/2; ux.i |= uy.i & 1ULL<<63; return ux.f; } #ifdef TEST int main(void) { return 0; } #endif