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 r9319097 = R;
double r9319098 = lambda1;
double r9319099 = lambda2;
double r9319100 = r9319098 - r9319099;
double r9319101 = phi1;
double r9319102 = phi2;
double r9319103 = r9319101 + r9319102;
double r9319104 = 2.0;
double r9319105 = r9319103 / r9319104;
double r9319106 = cos(r9319105);
double r9319107 = r9319100 * r9319106;
double r9319108 = r9319107 * r9319107;
double r9319109 = r9319101 - r9319102;
double r9319110 = r9319109 * r9319109;
double r9319111 = r9319108 + r9319110;
double r9319112 = sqrt(r9319111);
double r9319113 = r9319097 * r9319112;
return r9319113;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r9319114 = phi1;
double r9319115 = phi2;
double r9319116 = r9319114 - r9319115;
double r9319117 = r9319116 * r9319116;
double r9319118 = lambda1;
double r9319119 = lambda2;
double r9319120 = r9319118 - r9319119;
double r9319121 = r9319115 + r9319114;
double r9319122 = 2.0;
double r9319123 = r9319121 / r9319122;
double r9319124 = cos(r9319123);
double r9319125 = r9319120 * r9319124;
double r9319126 = r9319125 * r9319125;
double r9319127 = r9319117 + r9319126;
double r9319128 = sqrt(r9319127);
double r9319129 = R;
double r9319130 = r9319128 * r9319129;
double r9319131 = -inf.0;
bool r9319132 = r9319130 <= r9319131;
double r9319133 = r9319115 - r9319114;
double r9319134 = r9319129 * r9319133;
double r9319135 = 3.1183882542135315e+278;
bool r9319136 = r9319130 <= r9319135;
double r9319137 = r9319136 ? r9319130 : r9319134;
double r9319138 = r9319132 ? r9319134 : r9319137;
return r9319138;
}



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
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))))))