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 1.8014022246071136 \cdot 10^{+307}:\\
\;\;\;\;R \cdot \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)}\\
\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 r102132803 = R;
double r102132804 = lambda1;
double r102132805 = lambda2;
double r102132806 = r102132804 - r102132805;
double r102132807 = phi1;
double r102132808 = phi2;
double r102132809 = r102132807 + r102132808;
double r102132810 = 2.0;
double r102132811 = r102132809 / r102132810;
double r102132812 = cos(r102132811);
double r102132813 = r102132806 * r102132812;
double r102132814 = r102132813 * r102132813;
double r102132815 = r102132807 - r102132808;
double r102132816 = r102132815 * r102132815;
double r102132817 = r102132814 + r102132816;
double r102132818 = sqrt(r102132817);
double r102132819 = r102132803 * r102132818;
return r102132819;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r102132820 = phi1;
double r102132821 = phi2;
double r102132822 = r102132820 - r102132821;
double r102132823 = r102132822 * r102132822;
double r102132824 = lambda1;
double r102132825 = lambda2;
double r102132826 = r102132824 - r102132825;
double r102132827 = r102132820 + r102132821;
double r102132828 = 2.0;
double r102132829 = r102132827 / r102132828;
double r102132830 = cos(r102132829);
double r102132831 = r102132826 * r102132830;
double r102132832 = r102132831 * r102132831;
double r102132833 = r102132823 + r102132832;
double r102132834 = 1.8014022246071136e+307;
bool r102132835 = r102132833 <= r102132834;
double r102132836 = R;
double r102132837 = sqrt(r102132833);
double r102132838 = r102132836 * r102132837;
double r102132839 = r102132821 - r102132820;
double r102132840 = r102132836 * r102132839;
double r102132841 = r102132835 ? r102132838 : r102132840;
return r102132841;
}



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))) < 1.8014022246071136e+307Initial program 2.0
if 1.8014022246071136e+307 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 60.7
rmApplied add-cube-cbrt60.7
Taylor expanded around 0 47.1
Final simplification29.0
herbie shell --seed 2019128
(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))))))