\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)}\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \cos \phi_2, \cos \phi_1\right) \cdot \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \cos \phi_2, \cos \phi_1\right) \cdot \mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \cos \phi_2, \cos \phi_1\right)\right)}} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r969972 = lambda1;
double r969973 = phi2;
double r969974 = cos(r969973);
double r969975 = lambda2;
double r969976 = r969972 - r969975;
double r969977 = sin(r969976);
double r969978 = r969974 * r969977;
double r969979 = phi1;
double r969980 = cos(r969979);
double r969981 = cos(r969976);
double r969982 = r969974 * r969981;
double r969983 = r969980 + r969982;
double r969984 = atan2(r969978, r969983);
double r969985 = r969972 + r969984;
return r969985;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r969986 = lambda1;
double r969987 = sin(r969986);
double r969988 = lambda2;
double r969989 = cos(r969988);
double r969990 = r969987 * r969989;
double r969991 = cos(r969986);
double r969992 = sin(r969988);
double r969993 = r969991 * r969992;
double r969994 = r969990 - r969993;
double r969995 = phi2;
double r969996 = cos(r969995);
double r969997 = r969994 * r969996;
double r969998 = r969991 * r969989;
double r969999 = fma(r969992, r969987, r969998);
double r970000 = phi1;
double r970001 = cos(r970000);
double r970002 = fma(r969999, r969996, r970001);
double r970003 = r970002 * r970002;
double r970004 = r970002 * r970003;
double r970005 = cbrt(r970004);
double r970006 = atan2(r969997, r970005);
double r970007 = r970006 + r969986;
return r970007;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
Simplified0.9
rmApplied cos-diff0.9
rmApplied sin-diff0.2
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019156 +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)))))))