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_1 \le -4.23733770204599 \cdot 10^{+84}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)} \cdot R\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r5787775 = R;
double r5787776 = lambda1;
double r5787777 = lambda2;
double r5787778 = r5787776 - r5787777;
double r5787779 = phi1;
double r5787780 = phi2;
double r5787781 = r5787779 + r5787780;
double r5787782 = 2.0;
double r5787783 = r5787781 / r5787782;
double r5787784 = cos(r5787783);
double r5787785 = r5787778 * r5787784;
double r5787786 = r5787785 * r5787785;
double r5787787 = r5787779 - r5787780;
double r5787788 = r5787787 * r5787787;
double r5787789 = r5787786 + r5787788;
double r5787790 = sqrt(r5787789);
double r5787791 = r5787775 * r5787790;
return r5787791;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r5787792 = phi1;
double r5787793 = -4.23733770204599e+84;
bool r5787794 = r5787792 <= r5787793;
double r5787795 = R;
double r5787796 = phi2;
double r5787797 = r5787796 - r5787792;
double r5787798 = r5787795 * r5787797;
double r5787799 = r5787792 - r5787796;
double r5787800 = r5787799 * r5787799;
double r5787801 = r5787792 + r5787796;
double r5787802 = 2.0;
double r5787803 = r5787801 / r5787802;
double r5787804 = cos(r5787803);
double r5787805 = lambda1;
double r5787806 = lambda2;
double r5787807 = r5787805 - r5787806;
double r5787808 = r5787807 * r5787804;
double r5787809 = r5787808 * r5787807;
double r5787810 = r5787804 * r5787809;
double r5787811 = r5787800 + r5787810;
double r5787812 = sqrt(r5787811);
double r5787813 = r5787812 * r5787795;
double r5787814 = r5787794 ? r5787798 : r5787813;
return r5787814;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi1 < -4.23733770204599e+84Initial program 51.2
Taylor expanded around 0 20.6
if -4.23733770204599e+84 < phi1 Initial program 34.5
rmApplied associate-*r*34.5
Final simplification32.2
herbie shell --seed 2019165
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))