\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{\cos \phi_1 \cdot {\left(\cos \phi_1\right)}^{2} + {\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\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}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r60200 = lambda1;
double r60201 = phi2;
double r60202 = cos(r60201);
double r60203 = lambda2;
double r60204 = r60200 - r60203;
double r60205 = sin(r60204);
double r60206 = r60202 * r60205;
double r60207 = phi1;
double r60208 = cos(r60207);
double r60209 = cos(r60204);
double r60210 = r60202 * r60209;
double r60211 = r60208 + r60210;
double r60212 = atan2(r60206, r60211);
double r60213 = r60200 + r60212;
return r60213;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r60214 = lambda1;
double r60215 = phi2;
double r60216 = cos(r60215);
double r60217 = sin(r60214);
double r60218 = lambda2;
double r60219 = cos(r60218);
double r60220 = r60217 * r60219;
double r60221 = cos(r60214);
double r60222 = sin(r60218);
double r60223 = r60221 * r60222;
double r60224 = r60220 - r60223;
double r60225 = r60216 * r60224;
double r60226 = phi1;
double r60227 = cos(r60226);
double r60228 = 2.0;
double r60229 = pow(r60227, r60228);
double r60230 = r60227 * r60229;
double r60231 = r60221 * r60219;
double r60232 = r60217 * r60222;
double r60233 = r60231 + r60232;
double r60234 = r60216 * r60233;
double r60235 = 3.0;
double r60236 = pow(r60234, r60235);
double r60237 = r60230 + r60236;
double r60238 = r60234 - r60227;
double r60239 = r60234 * r60238;
double r60240 = r60227 * r60227;
double r60241 = r60239 + r60240;
double r60242 = r60237 / r60241;
double r60243 = atan2(r60225, r60242);
double r60244 = r60214 + r60243;
return r60244;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.8
rmApplied sin-diff0.7
rmApplied cos-diff0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied cube-mult0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019304
(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)))))))