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}\;\phi_1 \le -13.5182124464300184:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\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)}\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r80297 = R;
double r80298 = lambda1;
double r80299 = lambda2;
double r80300 = r80298 - r80299;
double r80301 = phi1;
double r80302 = phi2;
double r80303 = r80301 + r80302;
double r80304 = 2.0;
double r80305 = r80303 / r80304;
double r80306 = cos(r80305);
double r80307 = r80300 * r80306;
double r80308 = r80307 * r80307;
double r80309 = r80301 - r80302;
double r80310 = r80309 * r80309;
double r80311 = r80308 + r80310;
double r80312 = sqrt(r80311);
double r80313 = r80297 * r80312;
return r80313;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r80314 = phi1;
double r80315 = -13.518212446430018;
bool r80316 = r80314 <= r80315;
double r80317 = R;
double r80318 = phi2;
double r80319 = r80318 - r80314;
double r80320 = r80317 * r80319;
double r80321 = lambda1;
double r80322 = lambda2;
double r80323 = r80321 - r80322;
double r80324 = r80314 + r80318;
double r80325 = 2.0;
double r80326 = r80324 / r80325;
double r80327 = cos(r80326);
double r80328 = cbrt(r80327);
double r80329 = r80328 * r80328;
double r80330 = r80329 * r80328;
double r80331 = r80323 * r80330;
double r80332 = r80323 * r80327;
double r80333 = r80331 * r80332;
double r80334 = r80314 - r80318;
double r80335 = r80334 * r80334;
double r80336 = r80333 + r80335;
double r80337 = sqrt(r80336);
double r80338 = r80317 * r80337;
double r80339 = r80316 ? r80320 : r80338;
return r80339;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi1 < -13.518212446430018Initial program 47.2
Taylor expanded around 0 26.5
if -13.518212446430018 < phi1 Initial program 36.7
rmApplied add-cube-cbrt36.8
Final simplification34.2
herbie shell --seed 2020046
(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))))))