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 8.059112047867875 \cdot 10^{+307}:\\
\;\;\;\;R \cdot \sqrt{\left(\left(\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\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 r6989629 = R;
double r6989630 = lambda1;
double r6989631 = lambda2;
double r6989632 = r6989630 - r6989631;
double r6989633 = phi1;
double r6989634 = phi2;
double r6989635 = r6989633 + r6989634;
double r6989636 = 2.0;
double r6989637 = r6989635 / r6989636;
double r6989638 = cos(r6989637);
double r6989639 = r6989632 * r6989638;
double r6989640 = r6989639 * r6989639;
double r6989641 = r6989633 - r6989634;
double r6989642 = r6989641 * r6989641;
double r6989643 = r6989640 + r6989642;
double r6989644 = sqrt(r6989643);
double r6989645 = r6989629 * r6989644;
return r6989645;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r6989646 = phi1;
double r6989647 = phi2;
double r6989648 = r6989646 - r6989647;
double r6989649 = r6989648 * r6989648;
double r6989650 = lambda1;
double r6989651 = lambda2;
double r6989652 = r6989650 - r6989651;
double r6989653 = r6989646 + r6989647;
double r6989654 = 2.0;
double r6989655 = r6989653 / r6989654;
double r6989656 = cos(r6989655);
double r6989657 = r6989652 * r6989656;
double r6989658 = r6989657 * r6989657;
double r6989659 = r6989649 + r6989658;
double r6989660 = 8.059112047867875e+307;
bool r6989661 = r6989659 <= r6989660;
double r6989662 = R;
double r6989663 = cbrt(r6989656);
double r6989664 = r6989663 * r6989663;
double r6989665 = r6989664 * r6989663;
double r6989666 = r6989665 * r6989652;
double r6989667 = r6989666 * r6989657;
double r6989668 = r6989667 + r6989649;
double r6989669 = sqrt(r6989668);
double r6989670 = r6989662 * r6989669;
double r6989671 = r6989647 - r6989646;
double r6989672 = r6989671 * r6989662;
double r6989673 = r6989661 ? r6989670 : r6989672;
return r6989673;
}



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))) < 8.059112047867875e+307Initial program 1.8
rmApplied add-cube-cbrt1.8
if 8.059112047867875e+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 46.8
Final simplification28.9
herbie shell --seed 2019141
(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))))))