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}\;\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_2 + \phi_1}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)} \cdot R = -\infty:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{elif}\;\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_2 + \phi_1}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)} \cdot R \le 5.910642800888642065644947424394863974187 \cdot 10^{296}:\\
\;\;\;\;\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_2 + \phi_1}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)} \cdot R\\
\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 r5481826 = R;
double r5481827 = lambda1;
double r5481828 = lambda2;
double r5481829 = r5481827 - r5481828;
double r5481830 = phi1;
double r5481831 = phi2;
double r5481832 = r5481830 + r5481831;
double r5481833 = 2.0;
double r5481834 = r5481832 / r5481833;
double r5481835 = cos(r5481834);
double r5481836 = r5481829 * r5481835;
double r5481837 = r5481836 * r5481836;
double r5481838 = r5481830 - r5481831;
double r5481839 = r5481838 * r5481838;
double r5481840 = r5481837 + r5481839;
double r5481841 = sqrt(r5481840);
double r5481842 = r5481826 * r5481841;
return r5481842;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r5481843 = phi1;
double r5481844 = phi2;
double r5481845 = r5481843 - r5481844;
double r5481846 = r5481845 * r5481845;
double r5481847 = lambda1;
double r5481848 = lambda2;
double r5481849 = r5481847 - r5481848;
double r5481850 = r5481844 + r5481843;
double r5481851 = 2.0;
double r5481852 = r5481850 / r5481851;
double r5481853 = cos(r5481852);
double r5481854 = r5481849 * r5481853;
double r5481855 = r5481854 * r5481854;
double r5481856 = r5481846 + r5481855;
double r5481857 = sqrt(r5481856);
double r5481858 = R;
double r5481859 = r5481857 * r5481858;
double r5481860 = -inf.0;
bool r5481861 = r5481859 <= r5481860;
double r5481862 = r5481844 - r5481843;
double r5481863 = r5481858 * r5481862;
double r5481864 = 5.910642800888642e+296;
bool r5481865 = r5481859 <= r5481864;
double r5481866 = r5481865 ? r5481859 : r5481863;
double r5481867 = r5481861 ? r5481863 : r5481866;
return r5481867;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))) < -inf.0 or 5.910642800888642e+296 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))) Initial program 63.7
Taylor expanded around 0 46.5
if -inf.0 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))) < 5.910642800888642e+296Initial program 1.8
Final simplification28.6
herbie shell --seed 2019192
(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))))))