\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{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) + {\left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right)\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r54023 = lambda1;
double r54024 = phi2;
double r54025 = cos(r54024);
double r54026 = lambda2;
double r54027 = r54023 - r54026;
double r54028 = sin(r54027);
double r54029 = r54025 * r54028;
double r54030 = phi1;
double r54031 = cos(r54030);
double r54032 = cos(r54027);
double r54033 = r54025 * r54032;
double r54034 = r54031 + r54033;
double r54035 = atan2(r54029, r54034);
double r54036 = r54023 + r54035;
return r54036;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r54037 = lambda1;
double r54038 = phi2;
double r54039 = cos(r54038);
double r54040 = sin(r54037);
double r54041 = lambda2;
double r54042 = cos(r54041);
double r54043 = r54040 * r54042;
double r54044 = cos(r54037);
double r54045 = sin(r54041);
double r54046 = r54044 * r54045;
double r54047 = r54043 - r54046;
double r54048 = r54039 * r54047;
double r54049 = r54042 * r54039;
double r54050 = phi1;
double r54051 = cos(r54050);
double r54052 = fma(r54044, r54049, r54051);
double r54053 = r54052 * r54052;
double r54054 = r54053 * r54052;
double r54055 = r54040 * r54045;
double r54056 = r54039 * r54055;
double r54057 = 3.0;
double r54058 = pow(r54056, r54057);
double r54059 = r54054 + r54058;
double r54060 = r54039 * r54042;
double r54061 = fma(r54044, r54060, r54051);
double r54062 = r54056 - r54052;
double r54063 = r54056 * r54062;
double r54064 = fma(r54061, r54061, r54063);
double r54065 = r54059 / r54064;
double r54066 = atan2(r54048, r54065);
double r54067 = r54037 + r54066;
return r54067;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 1.0
rmApplied cos-diff1.0
Applied distribute-lft-in1.0
Applied associate-+r+1.0
Simplified1.0
rmApplied sin-diff0.2
rmApplied flip3-+0.2
Simplified0.2
rmApplied add-cbrt-cube0.4
Applied rem-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2020056 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))