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)\left(\tan^{-1}_* \frac{\sqrt{{\left(\cos \left(\frac{\phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}{\sqrt{1 - \left({\left(\cos \left(\frac{\phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \left(\log \left(\sqrt{e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right) + \log \left(\sqrt{e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right)\right)\right)}} \cdot 2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3455553 = R;
double r3455554 = 2.0;
double r3455555 = phi1;
double r3455556 = phi2;
double r3455557 = r3455555 - r3455556;
double r3455558 = r3455557 / r3455554;
double r3455559 = sin(r3455558);
double r3455560 = pow(r3455559, r3455554);
double r3455561 = cos(r3455555);
double r3455562 = cos(r3455556);
double r3455563 = r3455561 * r3455562;
double r3455564 = lambda1;
double r3455565 = lambda2;
double r3455566 = r3455564 - r3455565;
double r3455567 = r3455566 / r3455554;
double r3455568 = sin(r3455567);
double r3455569 = r3455563 * r3455568;
double r3455570 = r3455569 * r3455568;
double r3455571 = r3455560 + r3455570;
double r3455572 = sqrt(r3455571);
double r3455573 = 1.0;
double r3455574 = r3455573 - r3455571;
double r3455575 = sqrt(r3455574);
double r3455576 = atan2(r3455572, r3455575);
double r3455577 = r3455554 * r3455576;
double r3455578 = r3455553 * r3455577;
return r3455578;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3455579 = phi2;
double r3455580 = 2.0;
double r3455581 = r3455579 / r3455580;
double r3455582 = cos(r3455581);
double r3455583 = phi1;
double r3455584 = r3455583 / r3455580;
double r3455585 = sin(r3455584);
double r3455586 = r3455582 * r3455585;
double r3455587 = cos(r3455584);
double r3455588 = sin(r3455581);
double r3455589 = r3455587 * r3455588;
double r3455590 = r3455586 - r3455589;
double r3455591 = pow(r3455590, r3455580);
double r3455592 = lambda1;
double r3455593 = lambda2;
double r3455594 = r3455592 - r3455593;
double r3455595 = r3455594 / r3455580;
double r3455596 = sin(r3455595);
double r3455597 = cos(r3455579);
double r3455598 = cos(r3455583);
double r3455599 = r3455597 * r3455598;
double r3455600 = r3455599 * r3455596;
double r3455601 = r3455596 * r3455600;
double r3455602 = r3455591 + r3455601;
double r3455603 = sqrt(r3455602);
double r3455604 = 1.0;
double r3455605 = exp(r3455596);
double r3455606 = sqrt(r3455605);
double r3455607 = log(r3455606);
double r3455608 = r3455607 + r3455607;
double r3455609 = r3455600 * r3455608;
double r3455610 = r3455591 + r3455609;
double r3455611 = r3455604 - r3455610;
double r3455612 = sqrt(r3455611);
double r3455613 = atan2(r3455603, r3455612);
double r3455614 = r3455613 * r3455580;
double r3455615 = R;
double r3455616 = r3455614 * r3455615;
return r3455616;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.7
rmApplied div-sub24.7
Applied sin-diff24.1
rmApplied div-sub24.1
Applied sin-diff14.4
rmApplied add-log-exp14.4
rmApplied add-sqr-sqrt14.4
Applied log-prod14.4
Final simplification14.4
herbie shell --seed 2019168
(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))))))))))