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 -2.532482870032777712481534020967673709226 \cdot 10^{148}:\\
\;\;\;\;R \cdot \left(-\left(\phi_2 + \left(\frac{\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)}{\phi_1} + \frac{\phi_2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right)}{{\phi_1}^{2}}\right)\right)\right)\\
\mathbf{elif}\;\phi_2 \le 1.497503616333916239536784580188459111671 \cdot 10^{74}:\\
\;\;\;\;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 \sqrt[3]{{\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}}\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 r72779 = R;
double r72780 = lambda1;
double r72781 = lambda2;
double r72782 = r72780 - r72781;
double r72783 = phi1;
double r72784 = phi2;
double r72785 = r72783 + r72784;
double r72786 = 2.0;
double r72787 = r72785 / r72786;
double r72788 = cos(r72787);
double r72789 = r72782 * r72788;
double r72790 = r72789 * r72789;
double r72791 = r72783 - r72784;
double r72792 = r72791 * r72791;
double r72793 = r72790 + r72792;
double r72794 = sqrt(r72793);
double r72795 = r72779 * r72794;
return r72795;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r72796 = phi2;
double r72797 = -2.5324828700327777e+148;
bool r72798 = r72796 <= r72797;
double r72799 = R;
double r72800 = lambda2;
double r72801 = 0.5;
double r72802 = phi1;
double r72803 = r72796 + r72802;
double r72804 = r72801 * r72803;
double r72805 = cos(r72804);
double r72806 = 2.0;
double r72807 = pow(r72805, r72806);
double r72808 = lambda1;
double r72809 = r72807 * r72808;
double r72810 = r72800 * r72809;
double r72811 = r72810 / r72802;
double r72812 = r72796 * r72810;
double r72813 = pow(r72802, r72806);
double r72814 = r72812 / r72813;
double r72815 = r72811 + r72814;
double r72816 = r72796 + r72815;
double r72817 = -r72816;
double r72818 = r72799 * r72817;
double r72819 = 1.4975036163339162e+74;
bool r72820 = r72796 <= r72819;
double r72821 = r72808 - r72800;
double r72822 = r72802 + r72796;
double r72823 = 2.0;
double r72824 = r72822 / r72823;
double r72825 = cos(r72824);
double r72826 = r72821 * r72825;
double r72827 = 3.0;
double r72828 = pow(r72825, r72827);
double r72829 = cbrt(r72828);
double r72830 = r72821 * r72829;
double r72831 = r72826 * r72830;
double r72832 = r72802 - r72796;
double r72833 = r72832 * r72832;
double r72834 = r72831 + r72833;
double r72835 = sqrt(r72834);
double r72836 = r72799 * r72835;
double r72837 = r72796 - r72802;
double r72838 = r72799 * r72837;
double r72839 = r72820 ? r72836 : r72838;
double r72840 = r72798 ? r72818 : r72839;
return r72840;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < -2.5324828700327777e+148Initial program 62.7
rmApplied add-cbrt-cube62.7
Simplified62.7
rmApplied add-exp-log62.8
Simplified62.8
Taylor expanded around inf 45.3
if -2.5324828700327777e+148 < phi2 < 1.4975036163339162e+74Initial program 30.8
rmApplied add-cbrt-cube30.9
Simplified30.9
if 1.4975036163339162e+74 < phi2 Initial program 53.3
Taylor expanded around 0 22.9
Final simplification31.1
herbie shell --seed 2019350
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))