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 - \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 \log \left(e^{\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)\right) \cdot \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)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r85647 = R;
double r85648 = 2.0;
double r85649 = phi1;
double r85650 = phi2;
double r85651 = r85649 - r85650;
double r85652 = r85651 / r85648;
double r85653 = sin(r85652);
double r85654 = pow(r85653, r85648);
double r85655 = cos(r85649);
double r85656 = cos(r85650);
double r85657 = r85655 * r85656;
double r85658 = lambda1;
double r85659 = lambda2;
double r85660 = r85658 - r85659;
double r85661 = r85660 / r85648;
double r85662 = sin(r85661);
double r85663 = r85657 * r85662;
double r85664 = r85663 * r85662;
double r85665 = r85654 + r85664;
double r85666 = sqrt(r85665);
double r85667 = 1.0;
double r85668 = r85667 - r85665;
double r85669 = sqrt(r85668);
double r85670 = atan2(r85666, r85669);
double r85671 = r85648 * r85670;
double r85672 = r85647 * r85671;
return r85672;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r85673 = R;
double r85674 = 2.0;
double r85675 = phi1;
double r85676 = phi2;
double r85677 = r85675 - r85676;
double r85678 = r85677 / r85674;
double r85679 = sin(r85678);
double r85680 = pow(r85679, r85674);
double r85681 = cos(r85675);
double r85682 = cos(r85676);
double r85683 = r85681 * r85682;
double r85684 = lambda1;
double r85685 = lambda2;
double r85686 = r85684 - r85685;
double r85687 = r85686 / r85674;
double r85688 = sin(r85687);
double r85689 = r85683 * r85688;
double r85690 = r85689 * r85688;
double r85691 = r85680 + r85690;
double r85692 = sqrt(r85691);
double r85693 = 1.0;
double r85694 = cbrt(r85688);
double r85695 = r85694 * r85694;
double r85696 = r85695 * r85694;
double r85697 = exp(r85696);
double r85698 = log(r85697);
double r85699 = r85683 * r85698;
double r85700 = r85699 * r85696;
double r85701 = r85680 + r85700;
double r85702 = r85693 - r85701;
double r85703 = sqrt(r85702);
double r85704 = atan2(r85692, r85703);
double r85705 = r85674 * r85704;
double r85706 = r85673 * r85705;
return r85706;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.6
rmApplied add-log-exp24.6
rmApplied add-cube-cbrt24.7
rmApplied add-cube-cbrt24.7
Final simplification24.7
herbie shell --seed 2020020
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
:precision binary64
(* 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))))))))))