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(R \cdot \tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right) + \left(\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\sqrt[3]{\sqrt[3]{\left(\left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \left(\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \cos \phi_1\right)}}\right) \cdot 2double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1686624 = R;
double r1686625 = 2.0;
double r1686626 = phi1;
double r1686627 = phi2;
double r1686628 = r1686626 - r1686627;
double r1686629 = r1686628 / r1686625;
double r1686630 = sin(r1686629);
double r1686631 = pow(r1686630, r1686625);
double r1686632 = cos(r1686626);
double r1686633 = cos(r1686627);
double r1686634 = r1686632 * r1686633;
double r1686635 = lambda1;
double r1686636 = lambda2;
double r1686637 = r1686635 - r1686636;
double r1686638 = r1686637 / r1686625;
double r1686639 = sin(r1686638);
double r1686640 = r1686634 * r1686639;
double r1686641 = r1686640 * r1686639;
double r1686642 = r1686631 + r1686641;
double r1686643 = sqrt(r1686642);
double r1686644 = 1.0;
double r1686645 = r1686644 - r1686642;
double r1686646 = sqrt(r1686645);
double r1686647 = atan2(r1686643, r1686646);
double r1686648 = r1686625 * r1686647;
double r1686649 = r1686624 * r1686648;
return r1686649;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1686650 = R;
double r1686651 = phi1;
double r1686652 = phi2;
double r1686653 = r1686651 - r1686652;
double r1686654 = 2.0;
double r1686655 = r1686653 / r1686654;
double r1686656 = sin(r1686655);
double r1686657 = r1686656 * r1686656;
double r1686658 = cos(r1686652);
double r1686659 = lambda1;
double r1686660 = lambda2;
double r1686661 = r1686659 - r1686660;
double r1686662 = r1686661 / r1686654;
double r1686663 = sin(r1686662);
double r1686664 = r1686658 * r1686663;
double r1686665 = cos(r1686651);
double r1686666 = r1686664 * r1686665;
double r1686667 = r1686666 * r1686663;
double r1686668 = r1686657 + r1686667;
double r1686669 = sqrt(r1686668);
double r1686670 = cos(r1686655);
double r1686671 = r1686670 * r1686670;
double r1686672 = cbrt(r1686663);
double r1686673 = r1686672 * r1686672;
double r1686674 = r1686673 * r1686672;
double r1686675 = r1686663 * r1686663;
double r1686676 = r1686674 * r1686675;
double r1686677 = cbrt(r1686676);
double r1686678 = cbrt(r1686677);
double r1686679 = cbrt(r1686675);
double r1686680 = r1686678 * r1686679;
double r1686681 = r1686680 * r1686666;
double r1686682 = r1686671 - r1686681;
double r1686683 = sqrt(r1686682);
double r1686684 = atan2(r1686669, r1686683);
double r1686685 = r1686650 * r1686684;
double r1686686 = r1686685 * r1686654;
return r1686686;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.1
Simplified24.0
rmApplied add-cbrt-cube24.0
rmApplied cbrt-prod24.0
rmApplied add-cbrt-cube24.0
rmApplied add-cube-cbrt24.0
Final simplification24.0
herbie shell --seed 2019151
(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))))))))))