\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(\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} + \cos \phi_2 \cdot \left(\left(\sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51365 = lambda1;
double r51366 = phi2;
double r51367 = cos(r51366);
double r51368 = lambda2;
double r51369 = r51365 - r51368;
double r51370 = sin(r51369);
double r51371 = r51367 * r51370;
double r51372 = phi1;
double r51373 = cos(r51372);
double r51374 = cos(r51369);
double r51375 = r51367 * r51374;
double r51376 = r51373 + r51375;
double r51377 = atan2(r51371, r51376);
double r51378 = r51365 + r51377;
return r51378;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51379 = lambda1;
double r51380 = phi2;
double r51381 = cos(r51380);
double r51382 = sin(r51379);
double r51383 = lambda2;
double r51384 = cos(r51383);
double r51385 = r51382 * r51384;
double r51386 = cos(r51379);
double r51387 = sin(r51383);
double r51388 = r51386 * r51387;
double r51389 = r51385 - r51388;
double r51390 = r51381 * r51389;
double r51391 = phi1;
double r51392 = cos(r51391);
double r51393 = 3.0;
double r51394 = pow(r51392, r51393);
double r51395 = r51386 * r51384;
double r51396 = r51395 * r51381;
double r51397 = pow(r51396, r51393);
double r51398 = r51394 + r51397;
double r51399 = r51396 - r51392;
double r51400 = r51396 * r51399;
double r51401 = r51392 * r51392;
double r51402 = r51400 + r51401;
double r51403 = r51398 / r51402;
double r51404 = r51382 * r51387;
double r51405 = cbrt(r51404);
double r51406 = r51405 * r51405;
double r51407 = r51406 * r51405;
double r51408 = r51381 * r51407;
double r51409 = r51403 + r51408;
double r51410 = atan2(r51390, r51409);
double r51411 = r51379 + r51410;
return r51411;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.8
rmApplied cos-diff0.7
Applied distribute-lft-in0.7
Applied associate-+r+0.7
Simplified0.7
rmApplied sin-diff0.2
rmApplied add-cube-cbrt0.2
rmApplied flip3-+0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020033
(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)))))))