summaryrefslogtreecommitdiff
path: root/lib/libm/copysign.c
blob: 26982cea7ced1cc8cf834784487343bb31eee134 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
#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;
}