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 7.068000408330329 \cdot 10^{+307}:\\
\;\;\;\;\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 r30214363 = R;
double r30214364 = lambda1;
double r30214365 = lambda2;
double r30214366 = r30214364 - r30214365;
double r30214367 = phi1;
double r30214368 = phi2;
double r30214369 = r30214367 + r30214368;
double r30214370 = 2.0;
double r30214371 = r30214369 / r30214370;
double r30214372 = cos(r30214371);
double r30214373 = r30214366 * r30214372;
double r30214374 = r30214373 * r30214373;
double r30214375 = r30214367 - r30214368;
double r30214376 = r30214375 * r30214375;
double r30214377 = r30214374 + r30214376;
double r30214378 = sqrt(r30214377);
double r30214379 = r30214363 * r30214378;
return r30214379;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r30214380 = phi1;
double r30214381 = phi2;
double r30214382 = r30214380 - r30214381;
double r30214383 = r30214382 * r30214382;
double r30214384 = lambda1;
double r30214385 = lambda2;
double r30214386 = r30214384 - r30214385;
double r30214387 = r30214381 + r30214380;
double r30214388 = 2.0;
double r30214389 = r30214387 / r30214388;
double r30214390 = cos(r30214389);
double r30214391 = r30214386 * r30214390;
double r30214392 = r30214391 * r30214391;
double r30214393 = r30214383 + r30214392;
double r30214394 = sqrt(r30214393);
double r30214395 = R;
double r30214396 = r30214394 * r30214395;
double r30214397 = -inf.0;
bool r30214398 = r30214396 <= r30214397;
double r30214399 = r30214381 - r30214380;
double r30214400 = r30214395 * r30214399;
double r30214401 = 7.068000408330329e+307;
bool r30214402 = r30214396 <= r30214401;
double r30214403 = r30214402 ? r30214396 : r30214400;
double r30214404 = r30214398 ? r30214400 : r30214403;
return r30214404;
}



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 7.068000408330329e+307 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) Initial program 60.8
rmApplied add-cube-cbrt60.8
Taylor expanded around 0 47.4
if -inf.0 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) < 7.068000408330329e+307Initial program 1.9
Final simplification29.4
herbie shell --seed 2019120
(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))))))