\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{\left(\sin \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 + \left(\cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\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 \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \frac{{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}^{2} - {\left(\cos \phi_1\right)}^{2}}{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \cos \phi_1}} + \cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r43617 = lambda1;
double r43618 = phi2;
double r43619 = cos(r43618);
double r43620 = lambda2;
double r43621 = r43617 - r43620;
double r43622 = sin(r43621);
double r43623 = r43619 * r43622;
double r43624 = phi1;
double r43625 = cos(r43624);
double r43626 = cos(r43621);
double r43627 = r43619 * r43626;
double r43628 = r43625 + r43627;
double r43629 = atan2(r43623, r43628);
double r43630 = r43617 + r43629;
return r43630;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r43631 = lambda1;
double r43632 = sin(r43631);
double r43633 = lambda2;
double r43634 = cos(r43633);
double r43635 = r43632 * r43634;
double r43636 = phi2;
double r43637 = cos(r43636);
double r43638 = r43635 * r43637;
double r43639 = cos(r43631);
double r43640 = -r43633;
double r43641 = sin(r43640);
double r43642 = r43639 * r43641;
double r43643 = r43642 * r43637;
double r43644 = r43638 + r43643;
double r43645 = phi1;
double r43646 = cos(r43645);
double r43647 = 3.0;
double r43648 = pow(r43646, r43647);
double r43649 = r43639 * r43634;
double r43650 = r43637 * r43649;
double r43651 = pow(r43650, r43647);
double r43652 = r43648 + r43651;
double r43653 = r43646 * r43646;
double r43654 = 2.0;
double r43655 = pow(r43650, r43654);
double r43656 = pow(r43646, r43654);
double r43657 = r43655 - r43656;
double r43658 = r43650 + r43646;
double r43659 = r43657 / r43658;
double r43660 = r43650 * r43659;
double r43661 = r43653 + r43660;
double r43662 = r43652 / r43661;
double r43663 = sin(r43633);
double r43664 = r43632 * r43663;
double r43665 = r43637 * r43664;
double r43666 = r43662 + r43665;
double r43667 = atan2(r43644, r43666);
double r43668 = r43631 + r43667;
return r43668;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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