R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r10824420 = R;
double r10824421 = 2.0;
double r10824422 = phi1;
double r10824423 = phi2;
double r10824424 = r10824422 - r10824423;
double r10824425 = r10824424 / r10824421;
double r10824426 = sin(r10824425);
double r10824427 = pow(r10824426, r10824421);
double r10824428 = cos(r10824422);
double r10824429 = cos(r10824423);
double r10824430 = r10824428 * r10824429;
double r10824431 = lambda1;
double r10824432 = lambda2;
double r10824433 = r10824431 - r10824432;
double r10824434 = r10824433 / r10824421;
double r10824435 = sin(r10824434);
double r10824436 = r10824430 * r10824435;
double r10824437 = r10824436 * r10824435;
double r10824438 = r10824427 + r10824437;
double r10824439 = sqrt(r10824438);
double r10824440 = 1.0;
double r10824441 = r10824440 - r10824438;
double r10824442 = sqrt(r10824441);
double r10824443 = atan2(r10824439, r10824442);
double r10824444 = r10824421 * r10824443;
double r10824445 = r10824420 * r10824444;
return r10824445;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r10824446 = R;
double r10824447 = 2.0;
double r10824448 = phi1;
double r10824449 = r10824448 / r10824447;
double r10824450 = sin(r10824449);
double r10824451 = phi2;
double r10824452 = r10824451 / r10824447;
double r10824453 = cos(r10824452);
double r10824454 = r10824450 * r10824453;
double r10824455 = cos(r10824449);
double r10824456 = sin(r10824452);
double r10824457 = r10824455 * r10824456;
double r10824458 = r10824454 - r10824457;
double r10824459 = pow(r10824458, r10824447);
double r10824460 = cos(r10824448);
double r10824461 = cos(r10824451);
double r10824462 = r10824460 * r10824461;
double r10824463 = lambda1;
double r10824464 = lambda2;
double r10824465 = r10824463 - r10824464;
double r10824466 = r10824465 / r10824447;
double r10824467 = sin(r10824466);
double r10824468 = r10824462 * r10824467;
double r10824469 = r10824468 * r10824467;
double r10824470 = r10824459 + r10824469;
double r10824471 = sqrt(r10824470);
double r10824472 = 1.0;
double r10824473 = r10824467 * r10824467;
double r10824474 = r10824473 * r10824467;
double r10824475 = cbrt(r10824474);
double r10824476 = r10824473 * r10824475;
double r10824477 = cbrt(r10824476);
double r10824478 = r10824468 * r10824477;
double r10824479 = r10824459 + r10824478;
double r10824480 = r10824472 - r10824479;
double r10824481 = sqrt(r10824480);
double r10824482 = atan2(r10824471, r10824481);
double r10824483 = r10824447 * r10824482;
double r10824484 = r10824446 * r10824483;
return r10824484;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.2
rmApplied div-sub24.2
Applied sin-diff23.6
rmApplied div-sub23.6
Applied sin-diff13.7
rmApplied add-cbrt-cube13.7
rmApplied add-cbrt-cube13.7
Final simplification13.7
herbie shell --seed 2019173
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* R (* 2.0 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))) (sqrt (- 1.0 (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))))))))