On Mon, 2011-07-04 at 19:17 +0200, Georg-Johann Lay wrote: > >> double copysign (double x, double y) > >> { > >> unsigned short * const px = (unsigned short*)(char*)&x + 3; > >> unsigned short * const py = (unsigned short*)(char*)&y + 3; I don't get why you have the (char*) cast here? > >> *px = *px & ~MASK | *py & MASK; > >> return x; > >> } > >> > >> So I want to reassure me if the code is ok or not. > > > > It's not. Tey're wrong, you're right. So let me ask: if you change the last line to: return *px; instead, is it now OK WRT aliasing rules?