#include #include #define DMASK 0x8000000000000000 double copysign(double n, double s) { union {double f; uint64_t i;} sb = {s}; union {double f; uint64_t i;} nb = {n}; nb.i = (nb.i & ~DMASK) | (sb.i & DMASK); return nb.f; } #define FMASK 0x80000000 float copysignf(float n, float s) { union {float f; uint32_t i;} sb = {s}; union {float f; uint32_t i;} nb = {n}; nb.i = (nb.i & ~FMASK) | (sb.i & FMASK); return nb.f; }