\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 \left(-\lambda_2\right)\right)}{\log \left(e^{\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2}\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r65591 = lambda1;
double r65592 = phi2;
double r65593 = cos(r65592);
double r65594 = lambda2;
double r65595 = r65591 - r65594;
double r65596 = sin(r65595);
double r65597 = r65593 * r65596;
double r65598 = phi1;
double r65599 = cos(r65598);
double r65600 = cos(r65595);
double r65601 = r65593 * r65600;
double r65602 = r65599 + r65601;
double r65603 = atan2(r65597, r65602);
double r65604 = r65591 + r65603;
return r65604;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r65605 = lambda1;
double r65606 = phi2;
double r65607 = cos(r65606);
double r65608 = sin(r65605);
double r65609 = lambda2;
double r65610 = cos(r65609);
double r65611 = r65608 * r65610;
double r65612 = cos(r65605);
double r65613 = -r65609;
double r65614 = sin(r65613);
double r65615 = r65612 * r65614;
double r65616 = r65611 + r65615;
double r65617 = r65607 * r65616;
double r65618 = phi1;
double r65619 = cos(r65618);
double r65620 = r65612 * r65610;
double r65621 = r65620 * r65607;
double r65622 = r65619 + r65621;
double r65623 = exp(r65622);
double r65624 = log(r65623);
double r65625 = sin(r65609);
double r65626 = r65608 * r65625;
double r65627 = r65626 * r65607;
double r65628 = r65624 + r65627;
double r65629 = atan2(r65617, r65628);
double r65630 = r65605 + r65629;
return r65630;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied cos-diff0.9
Applied distribute-rgt-in0.9
Applied associate-+r+0.9
rmApplied sub-neg0.9
Applied sin-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 2019346
(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)))))))