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}\;\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) \le 5.299125604944257333078840442984987564475 \cdot 10^{303}:\\
\;\;\;\;R \cdot \sqrt{\left(\sqrt[3]{\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)} \cdot \sqrt[3]{\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)}\right) \cdot \sqrt[3]{\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)}\\
\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 r407452 = R;
double r407453 = lambda1;
double r407454 = lambda2;
double r407455 = r407453 - r407454;
double r407456 = phi1;
double r407457 = phi2;
double r407458 = r407456 + r407457;
double r407459 = 2.0;
double r407460 = r407458 / r407459;
double r407461 = cos(r407460);
double r407462 = r407455 * r407461;
double r407463 = r407462 * r407462;
double r407464 = r407456 - r407457;
double r407465 = r407464 * r407464;
double r407466 = r407463 + r407465;
double r407467 = sqrt(r407466);
double r407468 = r407452 * r407467;
return r407468;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r407469 = lambda1;
double r407470 = lambda2;
double r407471 = r407469 - r407470;
double r407472 = phi1;
double r407473 = phi2;
double r407474 = r407472 + r407473;
double r407475 = 2.0;
double r407476 = r407474 / r407475;
double r407477 = cos(r407476);
double r407478 = r407471 * r407477;
double r407479 = r407478 * r407478;
double r407480 = r407472 - r407473;
double r407481 = r407480 * r407480;
double r407482 = r407479 + r407481;
double r407483 = 5.2991256049442573e+303;
bool r407484 = r407482 <= r407483;
double r407485 = R;
double r407486 = cbrt(r407479);
double r407487 = r407486 * r407486;
double r407488 = r407487 * r407486;
double r407489 = r407488 + r407481;
double r407490 = sqrt(r407489);
double r407491 = r407485 * r407490;
double r407492 = r407473 - r407472;
double r407493 = r407485 * r407492;
double r407494 = r407484 ? r407491 : r407493;
return r407494;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) < 5.2991256049442573e+303Initial program 1.7
rmApplied add-cube-cbrt2.0
if 5.2991256049442573e+303 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 63.4
Taylor expanded around 0 46.7
Final simplification29.0
herbie shell --seed 2019209
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))