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)2 \cdot \left(\tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)} + \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_2\right) \cdot \left(\cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\cos \phi_1 \cdot \log \left(e^{\cos \left(\frac{\lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)}\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \left(\frac{\lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)\right)\right)}} \cdot R\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4183561 = R;
double r4183562 = 2.0;
double r4183563 = phi1;
double r4183564 = phi2;
double r4183565 = r4183563 - r4183564;
double r4183566 = r4183565 / r4183562;
double r4183567 = sin(r4183566);
double r4183568 = pow(r4183567, r4183562);
double r4183569 = cos(r4183563);
double r4183570 = cos(r4183564);
double r4183571 = r4183569 * r4183570;
double r4183572 = lambda1;
double r4183573 = lambda2;
double r4183574 = r4183572 - r4183573;
double r4183575 = r4183574 / r4183562;
double r4183576 = sin(r4183575);
double r4183577 = r4183571 * r4183576;
double r4183578 = r4183577 * r4183576;
double r4183579 = r4183568 + r4183578;
double r4183580 = sqrt(r4183579);
double r4183581 = 1.0;
double r4183582 = r4183581 - r4183579;
double r4183583 = sqrt(r4183582);
double r4183584 = atan2(r4183580, r4183583);
double r4183585 = r4183562 * r4183584;
double r4183586 = r4183561 * r4183585;
return r4183586;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4183587 = 2.0;
double r4183588 = phi1;
double r4183589 = phi2;
double r4183590 = r4183588 - r4183589;
double r4183591 = r4183590 / r4183587;
double r4183592 = sin(r4183591);
double r4183593 = r4183592 * r4183592;
double r4183594 = r4183592 * r4183593;
double r4183595 = cbrt(r4183594);
double r4183596 = r4183592 * r4183595;
double r4183597 = lambda1;
double r4183598 = lambda2;
double r4183599 = r4183597 - r4183598;
double r4183600 = r4183599 / r4183587;
double r4183601 = sin(r4183600);
double r4183602 = cos(r4183589);
double r4183603 = r4183601 * r4183602;
double r4183604 = cos(r4183588);
double r4183605 = r4183604 * r4183601;
double r4183606 = r4183603 * r4183605;
double r4183607 = r4183596 + r4183606;
double r4183608 = sqrt(r4183607);
double r4183609 = cos(r4183591);
double r4183610 = r4183609 * r4183609;
double r4183611 = r4183598 / r4183587;
double r4183612 = cos(r4183611);
double r4183613 = r4183597 / r4183587;
double r4183614 = sin(r4183613);
double r4183615 = r4183612 * r4183614;
double r4183616 = cos(r4183613);
double r4183617 = sin(r4183611);
double r4183618 = r4183616 * r4183617;
double r4183619 = r4183615 - r4183618;
double r4183620 = exp(r4183619);
double r4183621 = log(r4183620);
double r4183622 = r4183604 * r4183621;
double r4183623 = r4183602 * r4183619;
double r4183624 = r4183622 * r4183623;
double r4183625 = r4183610 - r4183624;
double r4183626 = sqrt(r4183625);
double r4183627 = atan2(r4183608, r4183626);
double r4183628 = R;
double r4183629 = r4183627 * r4183628;
double r4183630 = r4183587 * r4183629;
return r4183630;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.4
Simplified24.3
rmApplied add-log-exp24.3
rmApplied div-sub24.3
Applied sin-diff24.5
rmApplied div-sub24.5
Applied sin-diff24.1
rmApplied add-cbrt-cube24.3
Final simplification24.3
herbie shell --seed 2019163
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* R (* 2 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))) (sqrt (- 1 (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))))))))