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 \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{\left(1 - {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right) - \left(\cos \phi_2 \cdot \left(\sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}} \cdot \cos \phi_1\right)\right) \cdot \sqrt[3]{{\left(\sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}}\right)}^{3}}}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r99797 = R;
double r99798 = 2.0;
double r99799 = phi1;
double r99800 = phi2;
double r99801 = r99799 - r99800;
double r99802 = r99801 / r99798;
double r99803 = sin(r99802);
double r99804 = pow(r99803, r99798);
double r99805 = cos(r99799);
double r99806 = cos(r99800);
double r99807 = r99805 * r99806;
double r99808 = lambda1;
double r99809 = lambda2;
double r99810 = r99808 - r99809;
double r99811 = r99810 / r99798;
double r99812 = sin(r99811);
double r99813 = r99807 * r99812;
double r99814 = r99813 * r99812;
double r99815 = r99804 + r99814;
double r99816 = sqrt(r99815);
double r99817 = 1.0;
double r99818 = r99817 - r99815;
double r99819 = sqrt(r99818);
double r99820 = atan2(r99816, r99819);
double r99821 = r99798 * r99820;
double r99822 = r99797 * r99821;
return r99822;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r99823 = R;
double r99824 = 2.0;
double r99825 = phi1;
double r99826 = phi2;
double r99827 = r99825 - r99826;
double r99828 = r99827 / r99824;
double r99829 = sin(r99828);
double r99830 = pow(r99829, r99824);
double r99831 = cos(r99825);
double r99832 = lambda1;
double r99833 = lambda2;
double r99834 = r99832 - r99833;
double r99835 = r99834 / r99824;
double r99836 = sin(r99835);
double r99837 = r99831 * r99836;
double r99838 = cos(r99826);
double r99839 = r99837 * r99838;
double r99840 = r99839 * r99836;
double r99841 = r99830 + r99840;
double r99842 = sqrt(r99841);
double r99843 = 1.0;
double r99844 = r99843 - r99830;
double r99845 = 3.0;
double r99846 = pow(r99836, r99845);
double r99847 = cbrt(r99846);
double r99848 = r99847 * r99831;
double r99849 = r99838 * r99848;
double r99850 = pow(r99847, r99845);
double r99851 = cbrt(r99850);
double r99852 = r99849 * r99851;
double r99853 = r99844 - r99852;
double r99854 = sqrt(r99853);
double r99855 = atan2(r99842, r99854);
double r99856 = r99824 * r99855;
double r99857 = r99823 * r99856;
return r99857;
}



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
Simplified24.7
rmApplied add-cbrt-cube24.7
Simplified24.7
rmApplied add-cbrt-cube24.7
Simplified24.7
rmApplied add-cbrt-cube24.7
Simplified24.7
Final simplification24.7
herbie shell --seed 2019194
(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))))))))))