Listing 8: atan2()
UDouble<is_correlated> atan2(const UDouble<is_correlated>& arg1,
const UDouble<is_correlated>& arg2)
{
UDouble<is_correlated> retval;
double slope1 = 1.0, slope2 = 1.0;
double sum2 = arg2.value * arg2.value + arg1.value * arg1.value;
if (sum2 != 0.0)
{
slope1 = arg2.value / sum2;
slope2 = -arg1.value / sum2;
}
if (is_correlated)
retval.uncertainty = slope1 * arg1.uncertainty
+ slope2 * arg2.uncertainty;
else
retval.uncertainty = hypot(slope1 * arg1.uncertainty,
slope2 * arg2.uncertainty);
retval.value = atan2(arg1.value, arg2.value);
return retval;
}
//End of File