R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\begin{array}{l}
\mathbf{if}\;\phi_2 \le 9.37999987073613691256390226753120036995 \cdot 10^{53}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r12136717 = R;
double r12136718 = lambda1;
double r12136719 = lambda2;
double r12136720 = r12136718 - r12136719;
double r12136721 = phi1;
double r12136722 = phi2;
double r12136723 = r12136721 + r12136722;
double r12136724 = 2.0;
double r12136725 = r12136723 / r12136724;
double r12136726 = cos(r12136725);
double r12136727 = r12136720 * r12136726;
double r12136728 = r12136727 * r12136727;
double r12136729 = r12136721 - r12136722;
double r12136730 = r12136729 * r12136729;
double r12136731 = r12136728 + r12136730;
double r12136732 = sqrt(r12136731);
double r12136733 = r12136717 * r12136732;
return r12136733;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r12136734 = phi2;
double r12136735 = 9.379999870736137e+53;
bool r12136736 = r12136734 <= r12136735;
double r12136737 = R;
double r12136738 = lambda1;
double r12136739 = lambda2;
double r12136740 = r12136738 - r12136739;
double r12136741 = phi1;
double r12136742 = r12136741 + r12136734;
double r12136743 = 2.0;
double r12136744 = r12136742 / r12136743;
double r12136745 = cos(r12136744);
double r12136746 = r12136745 * r12136740;
double r12136747 = r12136745 * r12136746;
double r12136748 = r12136740 * r12136747;
double r12136749 = r12136741 - r12136734;
double r12136750 = r12136749 * r12136749;
double r12136751 = r12136748 + r12136750;
double r12136752 = sqrt(r12136751);
double r12136753 = r12136737 * r12136752;
double r12136754 = r12136734 - r12136741;
double r12136755 = r12136737 * r12136754;
double r12136756 = r12136736 ? r12136753 : r12136755;
return r12136756;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < 9.379999870736137e+53Initial program 36.7
rmApplied associate-*l*36.7
if 9.379999870736137e+53 < phi2 Initial program 50.3
Taylor expanded around 0 24.2
Final simplification34.4
herbie shell --seed 2019200
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))