\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{1}{\frac{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) - \cos \phi_1\right) + \cos \phi_1 \cdot \cos \phi_1}{{\left(\cos \phi_1\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r69208 = lambda1;
double r69209 = phi2;
double r69210 = cos(r69209);
double r69211 = lambda2;
double r69212 = r69208 - r69211;
double r69213 = sin(r69212);
double r69214 = r69210 * r69213;
double r69215 = phi1;
double r69216 = cos(r69215);
double r69217 = cos(r69212);
double r69218 = r69210 * r69217;
double r69219 = r69216 + r69218;
double r69220 = atan2(r69214, r69219);
double r69221 = r69208 + r69220;
return r69221;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r69222 = lambda1;
double r69223 = phi2;
double r69224 = cos(r69223);
double r69225 = sin(r69222);
double r69226 = r69224 * r69225;
double r69227 = lambda2;
double r69228 = cos(r69227);
double r69229 = r69226 * r69228;
double r69230 = cos(r69222);
double r69231 = -r69227;
double r69232 = sin(r69231);
double r69233 = r69230 * r69232;
double r69234 = r69224 * r69233;
double r69235 = r69229 + r69234;
double r69236 = 1.0;
double r69237 = r69230 * r69228;
double r69238 = sin(r69227);
double r69239 = r69225 * r69238;
double r69240 = r69237 + r69239;
double r69241 = r69224 * r69240;
double r69242 = phi1;
double r69243 = cos(r69242);
double r69244 = r69241 - r69243;
double r69245 = r69241 * r69244;
double r69246 = r69243 * r69243;
double r69247 = r69245 + r69246;
double r69248 = 3.0;
double r69249 = pow(r69243, r69248);
double r69250 = pow(r69241, r69248);
double r69251 = r69249 + r69250;
double r69252 = r69247 / r69251;
double r69253 = r69236 / r69252;
double r69254 = atan2(r69235, r69253);
double r69255 = r69222 + r69254;
return r69255;
}



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
rmApplied flip3-+0.3
Simplified0.3
rmApplied clear-num0.3
Final simplification0.3
herbie shell --seed 2020065
(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)))))))