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 7.727116615399575 \cdot 10^{+304}:\\
\;\;\;\;R \cdot \sqrt{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_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)}\\
\mathbf{else}:\\
\;\;\;\;\left(\phi_2 - \phi_1\right) \cdot R\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2955569 = R;
double r2955570 = lambda1;
double r2955571 = lambda2;
double r2955572 = r2955570 - r2955571;
double r2955573 = phi1;
double r2955574 = phi2;
double r2955575 = r2955573 + r2955574;
double r2955576 = 2.0;
double r2955577 = r2955575 / r2955576;
double r2955578 = cos(r2955577);
double r2955579 = r2955572 * r2955578;
double r2955580 = r2955579 * r2955579;
double r2955581 = r2955573 - r2955574;
double r2955582 = r2955581 * r2955581;
double r2955583 = r2955580 + r2955582;
double r2955584 = sqrt(r2955583);
double r2955585 = r2955569 * r2955584;
return r2955585;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2955586 = phi1;
double r2955587 = phi2;
double r2955588 = r2955586 - r2955587;
double r2955589 = r2955588 * r2955588;
double r2955590 = lambda1;
double r2955591 = lambda2;
double r2955592 = r2955590 - r2955591;
double r2955593 = r2955586 + r2955587;
double r2955594 = 2.0;
double r2955595 = r2955593 / r2955594;
double r2955596 = cos(r2955595);
double r2955597 = r2955592 * r2955596;
double r2955598 = r2955597 * r2955597;
double r2955599 = r2955589 + r2955598;
double r2955600 = 7.727116615399575e+304;
bool r2955601 = r2955599 <= r2955600;
double r2955602 = R;
double r2955603 = r2955596 * r2955596;
double r2955604 = r2955596 * r2955603;
double r2955605 = cbrt(r2955604);
double r2955606 = r2955605 * r2955592;
double r2955607 = r2955606 * r2955597;
double r2955608 = r2955607 + r2955589;
double r2955609 = sqrt(r2955608);
double r2955610 = r2955602 * r2955609;
double r2955611 = r2955587 - r2955586;
double r2955612 = r2955611 * r2955602;
double r2955613 = r2955601 ? r2955610 : r2955612;
return r2955613;
}



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))) < 7.727116615399575e+304Initial program 1.7
rmApplied add-cbrt-cube1.8
if 7.727116615399575e+304 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 60.2
rmApplied add-cbrt-cube60.2
Taylor expanded around 0 46.7
Final simplification28.8
herbie shell --seed 2019152
(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))))))