\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{\mathsf{fma}\left(\cos \phi_1, \cos \phi_1 \cdot \cos \phi_1, \left(\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right) \cdot \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)}{\mathsf{fma}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \frac{\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) - \cos \phi_1 \cdot \cos \phi_1}{\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) + \cos \phi_1}, \cos \phi_1 \cdot \cos \phi_1\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2050839 = lambda1;
double r2050840 = phi2;
double r2050841 = cos(r2050840);
double r2050842 = lambda2;
double r2050843 = r2050839 - r2050842;
double r2050844 = sin(r2050843);
double r2050845 = r2050841 * r2050844;
double r2050846 = phi1;
double r2050847 = cos(r2050846);
double r2050848 = cos(r2050843);
double r2050849 = r2050841 * r2050848;
double r2050850 = r2050847 + r2050849;
double r2050851 = atan2(r2050845, r2050850);
double r2050852 = r2050839 + r2050851;
return r2050852;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2050853 = lambda1;
double r2050854 = phi2;
double r2050855 = cos(r2050854);
double r2050856 = sin(r2050853);
double r2050857 = lambda2;
double r2050858 = cos(r2050857);
double r2050859 = r2050856 * r2050858;
double r2050860 = cos(r2050853);
double r2050861 = sin(r2050857);
double r2050862 = r2050860 * r2050861;
double r2050863 = r2050859 - r2050862;
double r2050864 = r2050855 * r2050863;
double r2050865 = phi1;
double r2050866 = cos(r2050865);
double r2050867 = r2050866 * r2050866;
double r2050868 = r2050860 * r2050858;
double r2050869 = fma(r2050861, r2050856, r2050868);
double r2050870 = r2050855 * r2050869;
double r2050871 = r2050870 * r2050870;
double r2050872 = r2050871 * r2050870;
double r2050873 = fma(r2050866, r2050867, r2050872);
double r2050874 = r2050871 - r2050867;
double r2050875 = r2050870 + r2050866;
double r2050876 = r2050874 / r2050875;
double r2050877 = fma(r2050870, r2050876, r2050867);
double r2050878 = r2050873 / r2050877;
double r2050879 = atan2(r2050864, r2050878);
double r2050880 = r2050853 + r2050879;
return r2050880;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
rmApplied sin-diff0.8
rmApplied cos-diff0.2
rmApplied flip3-+0.3
Simplified0.3
Simplified0.3
rmApplied flip--0.3
Final simplification0.3
herbie shell --seed 2019158 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))