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 3.1183882542135315 \cdot 10^{+278}:\\
\;\;\;\;\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 r9919631 = R;
double r9919632 = lambda1;
double r9919633 = lambda2;
double r9919634 = r9919632 - r9919633;
double r9919635 = phi1;
double r9919636 = phi2;
double r9919637 = r9919635 + r9919636;
double r9919638 = 2.0;
double r9919639 = r9919637 / r9919638;
double r9919640 = cos(r9919639);
double r9919641 = r9919634 * r9919640;
double r9919642 = r9919641 * r9919641;
double r9919643 = r9919635 - r9919636;
double r9919644 = r9919643 * r9919643;
double r9919645 = r9919642 + r9919644;
double r9919646 = sqrt(r9919645);
double r9919647 = r9919631 * r9919646;
return r9919647;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r9919648 = phi1;
double r9919649 = phi2;
double r9919650 = r9919648 - r9919649;
double r9919651 = r9919650 * r9919650;
double r9919652 = lambda1;
double r9919653 = lambda2;
double r9919654 = r9919652 - r9919653;
double r9919655 = r9919649 + r9919648;
double r9919656 = 2.0;
double r9919657 = r9919655 / r9919656;
double r9919658 = cos(r9919657);
double r9919659 = r9919654 * r9919658;
double r9919660 = r9919659 * r9919659;
double r9919661 = r9919651 + r9919660;
double r9919662 = sqrt(r9919661);
double r9919663 = R;
double r9919664 = r9919662 * r9919663;
double r9919665 = -inf.0;
bool r9919666 = r9919664 <= r9919665;
double r9919667 = r9919649 - r9919648;
double r9919668 = r9919663 * r9919667;
double r9919669 = 3.1183882542135315e+278;
bool r9919670 = r9919664 <= r9919669;
double r9919671 = r9919670 ? r9919664 : r9919668;
double r9919672 = r9919666 ? r9919668 : r9919671;
return r9919672;
}



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))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) < -inf.0 or 3.1183882542135315e+278 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) Initial program 59.9
rmApplied add-cube-cbrt59.9
Applied associate-*r*59.9
rmApplied add-cube-cbrt59.9
Taylor expanded around 0 46.9
if -inf.0 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) < 3.1183882542135315e+278Initial program 1.9
Final simplification29.4
herbie shell --seed 2019151
(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))))))