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{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\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{\left(\sqrt[3]{\log \left(e^{\cos \left(\frac{\phi_1 - \phi_2}{2}\right)}\right)} \cdot \left(\sqrt[3]{\cos \left(\frac{\phi_1 - \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 - \phi_2}{2}\right)}\right)\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\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)}} \cdot R\right) \cdot 2double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3467775 = R;
double r3467776 = 2.0;
double r3467777 = phi1;
double r3467778 = phi2;
double r3467779 = r3467777 - r3467778;
double r3467780 = r3467779 / r3467776;
double r3467781 = sin(r3467780);
double r3467782 = pow(r3467781, r3467776);
double r3467783 = cos(r3467777);
double r3467784 = cos(r3467778);
double r3467785 = r3467783 * r3467784;
double r3467786 = lambda1;
double r3467787 = lambda2;
double r3467788 = r3467786 - r3467787;
double r3467789 = r3467788 / r3467776;
double r3467790 = sin(r3467789);
double r3467791 = r3467785 * r3467790;
double r3467792 = r3467791 * r3467790;
double r3467793 = r3467782 + r3467792;
double r3467794 = sqrt(r3467793);
double r3467795 = 1.0;
double r3467796 = r3467795 - r3467793;
double r3467797 = sqrt(r3467796);
double r3467798 = atan2(r3467794, r3467797);
double r3467799 = r3467776 * r3467798;
double r3467800 = r3467775 * r3467799;
return r3467800;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3467801 = phi1;
double r3467802 = phi2;
double r3467803 = r3467801 - r3467802;
double r3467804 = 2.0;
double r3467805 = r3467803 / r3467804;
double r3467806 = sin(r3467805);
double r3467807 = r3467806 * r3467806;
double r3467808 = lambda1;
double r3467809 = lambda2;
double r3467810 = r3467808 - r3467809;
double r3467811 = r3467810 / r3467804;
double r3467812 = sin(r3467811);
double r3467813 = cos(r3467802);
double r3467814 = r3467812 * r3467813;
double r3467815 = cos(r3467801);
double r3467816 = r3467815 * r3467812;
double r3467817 = r3467814 * r3467816;
double r3467818 = r3467807 + r3467817;
double r3467819 = sqrt(r3467818);
double r3467820 = cos(r3467805);
double r3467821 = exp(r3467820);
double r3467822 = log(r3467821);
double r3467823 = cbrt(r3467822);
double r3467824 = cbrt(r3467820);
double r3467825 = r3467824 * r3467824;
double r3467826 = r3467823 * r3467825;
double r3467827 = r3467826 * r3467820;
double r3467828 = r3467827 - r3467817;
double r3467829 = sqrt(r3467828);
double r3467830 = atan2(r3467819, r3467829);
double r3467831 = R;
double r3467832 = r3467830 * r3467831;
double r3467833 = r3467832 * r3467804;
return r3467833;
}



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
Simplified24.6
rmApplied add-cube-cbrt24.6
rmApplied add-log-exp24.6
Final simplification24.6
herbie shell --seed 2019168
(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))))))))))