\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)}{\left(\sqrt[3]{\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)} + \cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51509 = lambda1;
double r51510 = phi2;
double r51511 = cos(r51510);
double r51512 = lambda2;
double r51513 = r51509 - r51512;
double r51514 = sin(r51513);
double r51515 = r51511 * r51514;
double r51516 = phi1;
double r51517 = cos(r51516);
double r51518 = cos(r51513);
double r51519 = r51511 * r51518;
double r51520 = r51517 + r51519;
double r51521 = atan2(r51515, r51520);
double r51522 = r51509 + r51521;
return r51522;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51523 = lambda1;
double r51524 = phi2;
double r51525 = cos(r51524);
double r51526 = sin(r51523);
double r51527 = lambda2;
double r51528 = cos(r51527);
double r51529 = r51526 * r51528;
double r51530 = cos(r51523);
double r51531 = -r51527;
double r51532 = sin(r51531);
double r51533 = r51530 * r51532;
double r51534 = r51529 + r51533;
double r51535 = r51525 * r51534;
double r51536 = r51528 * r51525;
double r51537 = phi1;
double r51538 = cos(r51537);
double r51539 = fma(r51530, r51536, r51538);
double r51540 = cbrt(r51539);
double r51541 = r51540 * r51540;
double r51542 = r51541 * r51540;
double r51543 = sin(r51527);
double r51544 = r51526 * r51543;
double r51545 = r51525 * r51544;
double r51546 = r51542 + r51545;
double r51547 = atan2(r51535, r51546);
double r51548 = r51523 + r51547;
return r51548;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
rmApplied sub-neg0.9
Applied sin-sum0.9
Simplified0.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Applied associate-+r+0.2
Simplified0.2
rmApplied add-cube-cbrt0.5
Final simplification0.5
herbie shell --seed 2020034 +o rules:numerics
(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)))))))