\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\right) \cdot \cos \phi_2 + \left(\cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\sqrt[3]{{\left(\sqrt[3]{{\left(\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right), \cos \phi_2, \cos \phi_1\right)\right)}^{3}}\right)}^{3}}} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r55955 = lambda1;
double r55956 = phi2;
double r55957 = cos(r55956);
double r55958 = lambda2;
double r55959 = r55955 - r55958;
double r55960 = sin(r55959);
double r55961 = r55957 * r55960;
double r55962 = phi1;
double r55963 = cos(r55962);
double r55964 = cos(r55959);
double r55965 = r55957 * r55964;
double r55966 = r55963 + r55965;
double r55967 = atan2(r55961, r55966);
double r55968 = r55955 + r55967;
return r55968;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r55969 = lambda1;
double r55970 = sin(r55969);
double r55971 = lambda2;
double r55972 = cos(r55971);
double r55973 = r55970 * r55972;
double r55974 = phi2;
double r55975 = cos(r55974);
double r55976 = r55973 * r55975;
double r55977 = cos(r55969);
double r55978 = -r55971;
double r55979 = sin(r55978);
double r55980 = r55977 * r55979;
double r55981 = r55980 * r55975;
double r55982 = r55976 + r55981;
double r55983 = sin(r55971);
double r55984 = r55983 * r55970;
double r55985 = fma(r55972, r55977, r55984);
double r55986 = phi1;
double r55987 = cos(r55986);
double r55988 = fma(r55985, r55975, r55987);
double r55989 = 3.0;
double r55990 = pow(r55988, r55989);
double r55991 = cbrt(r55990);
double r55992 = pow(r55991, r55989);
double r55993 = cbrt(r55992);
double r55994 = atan2(r55982, r55993);
double r55995 = r55994 + r55969;
return r55995;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.8
Simplified0.8
rmApplied cos-diff0.8
rmApplied sub-neg0.8
Applied sin-sum0.2
Applied distribute-lft-in0.2
Simplified0.2
Simplified0.2
rmApplied add-cbrt-cube0.3
Simplified0.3
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019195 +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)))))))