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.870059412379694 \cdot 10^{+298}:\\
\;\;\;\;\sqrt{\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\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 r3002419 = R;
double r3002420 = lambda1;
double r3002421 = lambda2;
double r3002422 = r3002420 - r3002421;
double r3002423 = phi1;
double r3002424 = phi2;
double r3002425 = r3002423 + r3002424;
double r3002426 = 2.0;
double r3002427 = r3002425 / r3002426;
double r3002428 = cos(r3002427);
double r3002429 = r3002422 * r3002428;
double r3002430 = r3002429 * r3002429;
double r3002431 = r3002423 - r3002424;
double r3002432 = r3002431 * r3002431;
double r3002433 = r3002430 + r3002432;
double r3002434 = sqrt(r3002433);
double r3002435 = r3002419 * r3002434;
return r3002435;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3002436 = phi1;
double r3002437 = phi2;
double r3002438 = r3002436 - r3002437;
double r3002439 = r3002438 * r3002438;
double r3002440 = lambda1;
double r3002441 = lambda2;
double r3002442 = r3002440 - r3002441;
double r3002443 = r3002437 + r3002436;
double r3002444 = 2.0;
double r3002445 = r3002443 / r3002444;
double r3002446 = cos(r3002445);
double r3002447 = r3002442 * r3002446;
double r3002448 = r3002447 * r3002447;
double r3002449 = r3002439 + r3002448;
double r3002450 = sqrt(r3002449);
double r3002451 = R;
double r3002452 = r3002450 * r3002451;
double r3002453 = -inf.0;
bool r3002454 = r3002452 <= r3002453;
double r3002455 = r3002437 - r3002436;
double r3002456 = r3002451 * r3002455;
double r3002457 = 1.870059412379694e+298;
bool r3002458 = r3002452 <= r3002457;
double r3002459 = r3002446 * r3002446;
double r3002460 = r3002442 * r3002442;
double r3002461 = r3002459 * r3002460;
double r3002462 = r3002461 + r3002439;
double r3002463 = sqrt(r3002462);
double r3002464 = r3002463 * r3002451;
double r3002465 = r3002458 ? r3002464 : r3002456;
double r3002466 = r3002454 ? r3002456 : r3002465;
return r3002466;
}



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.870059412379694e+298 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) Initial program 60.5
Taylor expanded around 0 47.6
if -inf.0 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) < 1.870059412379694e+298Initial program 1.7
rmApplied swap-sqr1.8
Final simplification29.4
herbie shell --seed 2019133
(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))))))