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 \sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}}\right) \cdot \log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r74521 = R;
double r74522 = 2.0;
double r74523 = phi1;
double r74524 = phi2;
double r74525 = r74523 - r74524;
double r74526 = r74525 / r74522;
double r74527 = sin(r74526);
double r74528 = pow(r74527, r74522);
double r74529 = cos(r74523);
double r74530 = cos(r74524);
double r74531 = r74529 * r74530;
double r74532 = lambda1;
double r74533 = lambda2;
double r74534 = r74532 - r74533;
double r74535 = r74534 / r74522;
double r74536 = sin(r74535);
double r74537 = r74531 * r74536;
double r74538 = r74537 * r74536;
double r74539 = r74528 + r74538;
double r74540 = sqrt(r74539);
double r74541 = 1.0;
double r74542 = r74541 - r74539;
double r74543 = sqrt(r74542);
double r74544 = atan2(r74540, r74543);
double r74545 = r74522 * r74544;
double r74546 = r74521 * r74545;
return r74546;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r74547 = R;
double r74548 = 2.0;
double r74549 = phi1;
double r74550 = r74549 / r74548;
double r74551 = sin(r74550);
double r74552 = phi2;
double r74553 = r74552 / r74548;
double r74554 = cos(r74553);
double r74555 = r74551 * r74554;
double r74556 = cos(r74550);
double r74557 = sin(r74553);
double r74558 = r74556 * r74557;
double r74559 = r74555 - r74558;
double r74560 = pow(r74559, r74548);
double r74561 = cos(r74549);
double r74562 = cos(r74552);
double r74563 = r74561 * r74562;
double r74564 = lambda1;
double r74565 = lambda2;
double r74566 = r74564 - r74565;
double r74567 = r74566 / r74548;
double r74568 = sin(r74567);
double r74569 = r74563 * r74568;
double r74570 = r74569 * r74568;
double r74571 = r74560 + r74570;
double r74572 = sqrt(r74571);
double r74573 = 1.0;
double r74574 = 3.0;
double r74575 = pow(r74568, r74574);
double r74576 = cbrt(r74575);
double r74577 = r74563 * r74576;
double r74578 = exp(r74568);
double r74579 = log(r74578);
double r74580 = r74577 * r74579;
double r74581 = r74560 + r74580;
double r74582 = r74573 - r74581;
double r74583 = sqrt(r74582);
double r74584 = atan2(r74572, r74583);
double r74585 = r74548 * r74584;
double r74586 = r74547 * r74585;
return r74586;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.5
rmApplied div-sub24.5
Applied sin-diff23.9
rmApplied div-sub23.9
Applied sin-diff14.2
rmApplied add-log-exp14.2
rmApplied add-cbrt-cube14.2
Simplified14.2
Final simplification14.2
herbie shell --seed 2019195
(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))))))))))