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 1.7107998967786368 \cdot 10^{+275}:\\
\;\;\;\;\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 r1907305 = R;
double r1907306 = lambda1;
double r1907307 = lambda2;
double r1907308 = r1907306 - r1907307;
double r1907309 = phi1;
double r1907310 = phi2;
double r1907311 = r1907309 + r1907310;
double r1907312 = 2.0;
double r1907313 = r1907311 / r1907312;
double r1907314 = cos(r1907313);
double r1907315 = r1907308 * r1907314;
double r1907316 = r1907315 * r1907315;
double r1907317 = r1907309 - r1907310;
double r1907318 = r1907317 * r1907317;
double r1907319 = r1907316 + r1907318;
double r1907320 = sqrt(r1907319);
double r1907321 = r1907305 * r1907320;
return r1907321;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1907322 = phi1;
double r1907323 = phi2;
double r1907324 = r1907322 - r1907323;
double r1907325 = r1907324 * r1907324;
double r1907326 = lambda1;
double r1907327 = lambda2;
double r1907328 = r1907326 - r1907327;
double r1907329 = r1907323 + r1907322;
double r1907330 = 2.0;
double r1907331 = r1907329 / r1907330;
double r1907332 = cos(r1907331);
double r1907333 = r1907328 * r1907332;
double r1907334 = r1907333 * r1907333;
double r1907335 = r1907325 + r1907334;
double r1907336 = sqrt(r1907335);
double r1907337 = R;
double r1907338 = r1907336 * r1907337;
double r1907339 = -inf.0;
bool r1907340 = r1907338 <= r1907339;
double r1907341 = r1907323 - r1907322;
double r1907342 = r1907337 * r1907341;
double r1907343 = 1.7107998967786368e+275;
bool r1907344 = r1907338 <= r1907343;
double r1907345 = r1907344 ? r1907338 : r1907342;
double r1907346 = r1907340 ? r1907342 : r1907345;
return r1907346;
}



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 1.7107998967786368e+275 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) Initial program 59.9
Taylor expanded around 0 46.6
if -inf.0 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) < 1.7107998967786368e+275Initial program 1.8
rmApplied *-commutative1.8
Final simplification29.0
herbie shell --seed 2019153
(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))))))