What is the purpose of COERCE_FLOAT
and COERCE_UNSIGNED_INT
macros in the Hex Rays decompiled code below?
double __cdecl sub_401580(float a1)
{
unsigned int v1; // eax@1
double v2; // st7@1
float v4; // [sp+10h] [bp+4h]@1
float v5; // [sp+10h] [bp+4h]@1
v1 = LODWORD(a1) & 0x80000000;
v4 = 1.273239493370056 * a1 - a1 * 0.4052847325801849 * COERCE_FLOAT(LODWORD(a1) & 0x7FFFFFFF);
v2 = v4;
v5 = v4 * v4;
return (float)(v5
* ((v5 * COERCE_FLOAT(v1 ^ COERCE_UNSIGNED_INT(-0.0032225901))
+ COERCE_FLOAT(v1 | COERCE_UNSIGNED_INT(0.015124941)))
* v5
+ COERCE_FLOAT(v1 | COERCE_UNSIGNED_INT(0.20363937)))
+ v2 * 0.7844448685646057);
}