\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)}{\sqrt[3]{{\left(\cos \lambda_1 \cdot \left(\cos \phi_2 \cdot \cos \lambda_2\right) + \cos \phi_1\right)}^{2}} \cdot \sqrt[3]{\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2} + \cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r53349 = lambda1;
double r53350 = phi2;
double r53351 = cos(r53350);
double r53352 = lambda2;
double r53353 = r53349 - r53352;
double r53354 = sin(r53353);
double r53355 = r53351 * r53354;
double r53356 = phi1;
double r53357 = cos(r53356);
double r53358 = cos(r53353);
double r53359 = r53351 * r53358;
double r53360 = r53357 + r53359;
double r53361 = atan2(r53355, r53360);
double r53362 = r53349 + r53361;
return r53362;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r53363 = lambda1;
double r53364 = phi2;
double r53365 = cos(r53364);
double r53366 = sin(r53363);
double r53367 = lambda2;
double r53368 = cos(r53367);
double r53369 = r53366 * r53368;
double r53370 = cos(r53363);
double r53371 = sin(r53367);
double r53372 = r53370 * r53371;
double r53373 = r53369 - r53372;
double r53374 = r53365 * r53373;
double r53375 = r53365 * r53368;
double r53376 = r53370 * r53375;
double r53377 = phi1;
double r53378 = cos(r53377);
double r53379 = r53376 + r53378;
double r53380 = 2.0;
double r53381 = pow(r53379, r53380);
double r53382 = cbrt(r53381);
double r53383 = r53370 * r53368;
double r53384 = r53383 * r53365;
double r53385 = r53378 + r53384;
double r53386 = cbrt(r53385);
double r53387 = r53382 * r53386;
double r53388 = r53366 * r53371;
double r53389 = r53365 * r53388;
double r53390 = r53387 + r53389;
double r53391 = atan2(r53374, r53390);
double r53392 = r53363 + r53391;
return r53392;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sin-diff0.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Applied associate-+r+0.2
Simplified0.2
rmApplied add-cube-cbrt0.5
rmApplied cbrt-unprod0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020047
(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)))))))