\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{\left(\cos \phi_2 \cdot \sin \lambda_1\right) \cdot \cos \lambda_2 + \cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\frac{{\left(\cos \phi_1\right)}^{3} + {\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right)}^{3}}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 - \cos \phi_1\right) + \cos \phi_1 \cdot \cos \phi_1} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r49036 = lambda1;
double r49037 = phi2;
double r49038 = cos(r49037);
double r49039 = lambda2;
double r49040 = r49036 - r49039;
double r49041 = sin(r49040);
double r49042 = r49038 * r49041;
double r49043 = phi1;
double r49044 = cos(r49043);
double r49045 = cos(r49040);
double r49046 = r49038 * r49045;
double r49047 = r49044 + r49046;
double r49048 = atan2(r49042, r49047);
double r49049 = r49036 + r49048;
return r49049;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r49050 = lambda1;
double r49051 = phi2;
double r49052 = cos(r49051);
double r49053 = sin(r49050);
double r49054 = r49052 * r49053;
double r49055 = lambda2;
double r49056 = cos(r49055);
double r49057 = r49054 * r49056;
double r49058 = cos(r49050);
double r49059 = -r49055;
double r49060 = sin(r49059);
double r49061 = r49058 * r49060;
double r49062 = r49052 * r49061;
double r49063 = r49057 + r49062;
double r49064 = phi1;
double r49065 = cos(r49064);
double r49066 = 3.0;
double r49067 = pow(r49065, r49066);
double r49068 = r49058 * r49056;
double r49069 = r49068 * r49052;
double r49070 = pow(r49069, r49066);
double r49071 = r49067 + r49070;
double r49072 = r49069 - r49065;
double r49073 = r49069 * r49072;
double r49074 = r49065 * r49065;
double r49075 = r49073 + r49074;
double r49076 = r49071 / r49075;
double r49077 = sin(r49055);
double r49078 = r49053 * r49077;
double r49079 = r49078 * r49052;
double r49080 = r49076 + r49079;
double r49081 = atan2(r49063, r49080);
double r49082 = r49050 + r49081;
return r49082;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sub-neg0.9
Applied sin-sum0.8
Applied distribute-lft-in0.8
Simplified0.8
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
Applied associate-+r+0.2
rmApplied flip3-+0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020018
(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)))))))