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}\;\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \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) \le 4.652420450828998 \cdot 10^{+307}:\\
\;\;\;\;R \cdot \left(\sqrt{\sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \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)}} \cdot \sqrt{\sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \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)}}\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 r1845781 = R;
double r1845782 = lambda1;
double r1845783 = lambda2;
double r1845784 = r1845782 - r1845783;
double r1845785 = phi1;
double r1845786 = phi2;
double r1845787 = r1845785 + r1845786;
double r1845788 = 2.0;
double r1845789 = r1845787 / r1845788;
double r1845790 = cos(r1845789);
double r1845791 = r1845784 * r1845790;
double r1845792 = r1845791 * r1845791;
double r1845793 = r1845785 - r1845786;
double r1845794 = r1845793 * r1845793;
double r1845795 = r1845792 + r1845794;
double r1845796 = sqrt(r1845795);
double r1845797 = r1845781 * r1845796;
return r1845797;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1845798 = phi1;
double r1845799 = phi2;
double r1845800 = r1845798 - r1845799;
double r1845801 = r1845800 * r1845800;
double r1845802 = lambda1;
double r1845803 = lambda2;
double r1845804 = r1845802 - r1845803;
double r1845805 = r1845798 + r1845799;
double r1845806 = 2.0;
double r1845807 = r1845805 / r1845806;
double r1845808 = cos(r1845807);
double r1845809 = r1845804 * r1845808;
double r1845810 = r1845809 * r1845809;
double r1845811 = r1845801 + r1845810;
double r1845812 = 4.652420450828998e+307;
bool r1845813 = r1845811 <= r1845812;
double r1845814 = R;
double r1845815 = sqrt(r1845811);
double r1845816 = sqrt(r1845815);
double r1845817 = r1845816 * r1845816;
double r1845818 = r1845814 * r1845817;
double r1845819 = r1845799 - r1845798;
double r1845820 = r1845814 * r1845819;
double r1845821 = r1845813 ? r1845818 : r1845820;
return r1845821;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) < 4.652420450828998e+307Initial program 2.0
rmApplied add-sqr-sqrt2.0
Applied sqrt-prod2.4
if 4.652420450828998e+307 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 60.8
Taylor expanded around 0 47.1
Final simplification29.0
herbie shell --seed 2019156
(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))))))