\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)}{\log \left(e^{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2 + \cos \phi_1}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r36487 = lambda1;
double r36488 = phi2;
double r36489 = cos(r36488);
double r36490 = lambda2;
double r36491 = r36487 - r36490;
double r36492 = sin(r36491);
double r36493 = r36489 * r36492;
double r36494 = phi1;
double r36495 = cos(r36494);
double r36496 = cos(r36491);
double r36497 = r36489 * r36496;
double r36498 = r36495 + r36497;
double r36499 = atan2(r36493, r36498);
double r36500 = r36487 + r36499;
return r36500;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r36501 = lambda1;
double r36502 = phi2;
double r36503 = cos(r36502);
double r36504 = sin(r36501);
double r36505 = lambda2;
double r36506 = cos(r36505);
double r36507 = r36504 * r36506;
double r36508 = cos(r36501);
double r36509 = sin(r36505);
double r36510 = r36508 * r36509;
double r36511 = r36507 - r36510;
double r36512 = r36503 * r36511;
double r36513 = r36504 * r36509;
double r36514 = r36506 * r36508;
double r36515 = r36513 + r36514;
double r36516 = r36515 * r36503;
double r36517 = phi1;
double r36518 = cos(r36517);
double r36519 = r36516 + r36518;
double r36520 = exp(r36519);
double r36521 = log(r36520);
double r36522 = atan2(r36512, r36521);
double r36523 = r36501 + r36522;
return r36523;
}



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 sub-neg0.8
Applied cos-sum0.2
Simplified0.2
rmApplied add-log-exp0.3
Applied add-log-exp0.3
Applied sum-log0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019326
(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)))))))