\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)}{\frac{{\left(\cos \phi_1\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}^{3}}{\cos \phi_1 \cdot \cos \phi_1 + \left(\cos \lambda_1 \cdot \left(\cos \phi_2 \cdot \cos \lambda_2\right)\right) \cdot \frac{{\left(\cos \lambda_1 \cdot \left(\cos \phi_2 \cdot \cos \lambda_2\right)\right)}^{2} - {\left(\cos \phi_1\right)}^{2}}{\cos \phi_1 + \cos \lambda_1 \cdot \left(\cos \phi_2 \cdot \cos \lambda_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 r36621 = lambda1;
double r36622 = phi2;
double r36623 = cos(r36622);
double r36624 = lambda2;
double r36625 = r36621 - r36624;
double r36626 = sin(r36625);
double r36627 = r36623 * r36626;
double r36628 = phi1;
double r36629 = cos(r36628);
double r36630 = cos(r36625);
double r36631 = r36623 * r36630;
double r36632 = r36629 + r36631;
double r36633 = atan2(r36627, r36632);
double r36634 = r36621 + r36633;
return r36634;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r36635 = lambda1;
double r36636 = phi2;
double r36637 = cos(r36636);
double r36638 = sin(r36635);
double r36639 = lambda2;
double r36640 = cos(r36639);
double r36641 = r36638 * r36640;
double r36642 = cos(r36635);
double r36643 = -r36639;
double r36644 = sin(r36643);
double r36645 = r36642 * r36644;
double r36646 = r36641 + r36645;
double r36647 = r36637 * r36646;
double r36648 = phi1;
double r36649 = cos(r36648);
double r36650 = 3.0;
double r36651 = pow(r36649, r36650);
double r36652 = r36642 * r36640;
double r36653 = r36637 * r36652;
double r36654 = pow(r36653, r36650);
double r36655 = r36651 + r36654;
double r36656 = r36649 * r36649;
double r36657 = r36637 * r36640;
double r36658 = r36642 * r36657;
double r36659 = 2.0;
double r36660 = pow(r36658, r36659);
double r36661 = pow(r36649, r36659);
double r36662 = r36660 - r36661;
double r36663 = r36649 + r36658;
double r36664 = r36662 / r36663;
double r36665 = r36658 * r36664;
double r36666 = r36656 + r36665;
double r36667 = r36655 / r36666;
double r36668 = sin(r36639);
double r36669 = r36638 * r36668;
double r36670 = r36669 * r36637;
double r36671 = r36667 + r36670;
double r36672 = atan2(r36647, r36671);
double r36673 = r36635 + r36672;
return r36673;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sub-neg0.9
Applied sin-sum0.8
Simplified0.8
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
Applied associate-+r+0.2
Simplified0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied flip--0.3
Simplified0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019305
(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)))))))